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

file_1
file_2
dir_1
dir_2
# etc.
new_subdir

我想在 new_subdir 中复制位于此目录中的所有现有文件和目录。如何通过 linux 终端完成此操作?

最佳答案

这是一个老问题,但似乎没有一个答案有效(它们导致目标文件夹被递归复制到自身中),所以我想我会提供一些工作示例:
通过 find -exec 复制:find . ! -regex '.*/new_subdir' ! -regex '.' -exec cp -r '{}' new_subdir \;此代码使用正则表达式查找所有不是 new_subdir 的文件和目录(在当前目录中)并将它们复制到 new_subdir 中。 ! -regex '.' 位在那里以防止包含当前目录本身。使用 find 是我所知道的最强大的技术,但它冗长且有时令人困惑。
用 extglob 复制:cp -r !(new_subdir) new_subdir如果您为 bash 终端启用了 extglob(可能是这种情况),那么您可以使用 !将当前目录中所有不是 new_subdir 的内容复制到 new_subdir 中。
没有 extglob 的复制:mv * new_subdir ; cp -r new_subdir/* .如果您没有 extglob 并且 find 对您没有吸引力,并且您真的想做一些 hacky,则可以将所有文件移动到子目录中,然后递归地将它们复制回原始目录。与将目标文件夹复制到自身中的 cp 不同, mv 在尝试将目标文件夹移动到自身内部时只会引发错误。 (但它成功地移动了所有其他文件和文件夹。)

关于linux - 将目录中的所有文件复制到linux中的本地子目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9842633/

10-14 16:16
查看更多