复制整个目录但排除具有特定名称的所有文件夹和子文件夹

Copy whole directory but exclude all folders and subfolders with certain name

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

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

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

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

完整的命令是:

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