将目录中的所有文件复制到linux中的本地子目录

时间:2012-03-23 16:10:57

标签: linux bash

我有一个具有以下结构的目录:

file_1
file_2
dir_1
dir_2
# etc.
new_subdir

我想复制new_subdir中此目录中所有现有文件和目录的副本。我怎样才能通过linux终端实现这个目标?

3 个答案:

答案 0 :(得分:3)

这是一个老问题,但没有一个答案似乎有用(它们会导致目标文件夹递归复制到自身),所以我想我会提供一些有用的例子:

通过find -exec复制:

find . ! -regex '.*/new_subdir' ! -regex '.' -exec cp -r '{}' new_subdir \;

此代码使用正则表达式查找非new_subdir的所有文件和目录(在当前目录中)并将它们复制到new_subdir中。 ! -regex '.'位用于保持当前目录本身不被包含。使用find是我所知道的最强大的技术,但它有时啰嗦而且有点令人困惑。

使用\ textglob复制:

cp -r !(new_subdir) new_subdir

如果您为bash终端启用了extglob(可能就是这种情况),那么您可以使用!将当前目录中不是new_subdir的所有内容复制到new_subdir。

没有extglob的复制:

mv * new_subdir ; cp -r new_subdir/* .

如果你没有extglob并且发现并不吸引你并且你真的想做一些hacky,你可以将所有文件移动到子目录中,然后递归地将它们复制回原来的目录。与将目标文件夹复制到自身的cp不同,mv在尝试移动目标文件夹本身时会抛出错误。 (但它成功地移动了所有其他文件和文件夹。)

答案 1 :(得分:1)

你的意思是

cp -R * new_subdir

cp-R作为参数,这意味着递归(因此,复制也是目录),*表示所有文件(和目录)。

虽然*包含new_subdir本身,但cp检测到此情况并忽略new_subdir(因此它不会将其复制到自身!)

答案 2 :(得分:1)

尝试类似:

 cp -R * /path_to_new_dir/