关于bash:将文件从一个目录复制到现有目录中

Copy files from one directory into an existing directory

在bash中,我需要这样做:

  • 获取目录中的所有文件

  • 将它们复制到现有目录中

  • 我该怎么做?我试过cp -r t1 t2(T1和T2都是现有目录,T1中有文件),但它在T2中创建了一个名为T1的目录,我不想这样,我需要T1中的文件直接进入T2。我该怎么做?


    你想要的是:

    1
    cp -R t1/. t2/

    结尾的点告诉它复制当前目录的内容,而不是目录本身。此方法还包括隐藏的文件和文件夹。


    如果要将某个目录中的内容复制到当前目录中,请执行以下操作:

    1
    cp dir1/* .

    这假定您没有尝试复制隐藏文件。


    1
    cp dir1/* dir2

    或者如果你在dir1中有目录,你也要复制它

    1
    cp -r dir1/* dir2


    假设T1是包含文件的文件夹,而T2是空目录。你想要的是这样的:

    1
    sudo cp -R t1/* t2/

    记住,对于第一个示例,T1和T2必须是完整路径,或者是相对路径(基于您所在的位置)。如果需要,可以导航到空文件夹(t2)并执行以下操作:

    1
    sudo cp -R t1/* ./

    或者,您可以导航到包含文件(T1)的文件夹,并执行以下操作:

    1
    sudo cp -R ./* t2/

    注意,*符号(或通配符)代表所有文件和文件夹。-r标志以递归方式表示(所有内容都在其中)。


    1
    cp -R t1/ t2

    源目录上的尾随斜杠稍微改变了语义,因此它只复制内容,而不复制目录本身。它还避免了Bertrand答案中的全局文件和不可见文件的问题(复制t1/*会丢失不可见文件,复制't1/*t1/*'会复制T1/。还有T1/,你不想要)。


    根据某些详细信息,您可能需要执行以下操作:

    1
    2
    3
    4
    5
    6
    7
    r=$(pwd)
    case"$TARG" in
        /*) p=$r;;
        *) p="";;
        esac
    cd"$SRC" && cp -r ."$p/$TARG"
    cd"$r"

    …这基本上会更改到SRC目录,并将其复制到目标目录,然后返回到开始时的位置。

    额外的麻烦是处理相对或绝对目标。

    (这不依赖于cp命令本身的微妙语义……关于它如何处理带有或不带有尾随/的源规范。因为我不确定它们是否稳定、便携和可靠,而不仅仅是GNU cp,我也不知道它们将来是否会继续如此)。


    对于某些目录,这将使用full,因为它将所有内容从"folder1"复制到某些目录中的新目录"folder2"。

    $(pwd)将获取当前目录的路径。

    注意folder1后面的点(.)以获取folder1中的所有内容

    1
    cp -r $(pwd)/folder1/. $(pwd)/folder2