首页 > 解决方案 > 复制整个目录,但排除具有特定名称的所有文件夹和子文件夹

问题描述

我不允许在我正在处理的集群上使用 rsync,所以我需要使用 cp。我想复制一个大目录,包括所有文件和子文件夹等,但没有任何名为“outdir”的文件夹。我试过 cp -r -v ./!(outdir) ../target-directory/ 了,但它仍然将所有文件夹和内容复制到名为 outdir 的更深目录中。它只包括最高目录中的 outdir 文件夹。

我也尝试过cp -r ./*/!(outdir) ../target-directory/,但是那个将所有文件复制到文件夹中而没有保留任何层次结构或文件夹等。

我也尝试了某些 find 命令,但它没有用,但也许我只是在做一些愚蠢的事情。我是 bash 的初学者,所以如果你能解释你的答案以及标志等的作用,那真的很有帮助,我现在一直在尝试,我认为不应该那么难做。

标签: bashunixcp

解决方案


而不是cp,您可以使用tarwith 选项--exclude来控制要复制的内容。

完整的命令是:

tar --exclude="outdir" -cvpf - . | (cd TARGET_DIRECTORY; tar -xpf -)
  • 因此,任何包含“outdir”模式的路径都将被排除。
  • 如果没有该--exclude选项,它将复制 TARGET_DIRECTORY 下当前目录的整个结构。
  • 您可以将.第一个 tar 中的 替换为所需的源目录。

推荐阅读