将文件从一个目录复制到现有目录中

时间:2010-09-04 20:12:12

标签: bash file directory copy cp

在bash中,我需要这样做:

  1. 获取目录中的所有文件

  2. 将它们复制到现有目录

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

8 个答案:

答案 0 :(得分:339)

你想要的是:

cp -R t1/. t2/

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

答案 1 :(得分:30)

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

cp dir1/* .

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

答案 2 :(得分:28)

cp dir1/* dir2

或者,如果你在dir1中有你想复制的目录

cp -r dir1/* dir2

答案 3 :(得分:8)

假定t1是其中包含文件的文件夹,t2是空目录。您想要的是这样的:

sudo cp -R t1/* t2/

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

sudo cp -R t1/* ./

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

sudo cp -R ./* t2/

注意:*符号(或通配符)代表所有文件和文件夹。 -R标志是递归的(所有内容都在其中)。

答案 4 :(得分:3)

cp -R t1/ t2

源目录上的尾部斜杠稍微改变了语义,因此它复制内容而不是目录本身。它还避免了Bertrand的答案所带来的globbing和不可见文件的问题(复制t1/*错过了不可见文件,复制`t1 / * t1 /.*'复制t1 /。和t1 / ..,你没有要)。

答案 5 :(得分:2)

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

r=$(pwd)
case "$TARG" in
    /*) p=$r;;
    *) p="";;
    esac
cd "$SRC" && cp -r . "$p/$TARG"
cd "$r"

...这基本上会更改为SRC目录并将其复制到目标,然后返回到您开始的时间。

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

(这不依赖于cp命令本身的细微语义...关于它如何处理源规范有或没有尾随/ ...因为我不确定它们是否稳定,可移植,除了GNU cp之外还可靠,我不知道将来它们是否还会如此。

答案 6 :(得分:1)

这会将 folder1 的所有内容复制到现有的 folder2

cp -r folder1/. folder2

答案 7 :(得分:0)

对于某个目录内的目录,将使用全部内容,因为它将所有内容从“ folder1”复制到某个目录内的新目录“ folder2”。

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

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

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