我有一个具有以下结构的目录:
file_1
file_2
dir_1
dir_2
# etc.
new_subdir
我想复制new_subdir
中此目录中所有现有文件和目录的副本。我怎样才能通过linux终端实现这个目标?
答案 0 :(得分:3)
这是一个老问题,但没有一个答案似乎有用(它们会导致目标文件夹递归复制到自身),所以我想我会提供一些有用的例子:
find . ! -regex '.*/new_subdir' ! -regex '.' -exec cp -r '{}' new_subdir \;
此代码使用正则表达式查找非new_subdir的所有文件和目录(在当前目录中)并将它们复制到new_subdir中。 ! -regex '.'
位用于保持当前目录本身不被包含。使用find是我所知道的最强大的技术,但它有时啰嗦而且有点令人困惑。
cp -r !(new_subdir) new_subdir
如果您为bash终端启用了extglob(可能就是这种情况),那么您可以使用!将当前目录中不是new_subdir的所有内容复制到new_subdir。
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/