bash - 复制整个目录,但排除具有特定名称的所有文件夹和子文件夹
问题描述
我不允许在我正在处理的集群上使用 rsync,所以我需要使用 cp。我想复制一个大目录,包括所有文件和子文件夹等,但没有任何名为“outdir”的文件夹。我试过 cp -r -v ./!(outdir) ../target-directory/
了,但它仍然将所有文件夹和内容复制到名为 outdir 的更深目录中。它只包括最高目录中的 outdir 文件夹。
我也尝试过cp -r ./*/!(outdir) ../target-directory/
,但是那个将所有文件复制到文件夹中而没有保留任何层次结构或文件夹等。
我也尝试了某些 find 命令,但它没有用,但也许我只是在做一些愚蠢的事情。我是 bash 的初学者,所以如果你能解释你的答案以及标志等的作用,那真的很有帮助,我现在一直在尝试,我认为不应该那么难做。
解决方案
而不是cp
,您可以使用tar
with 选项--exclude
来控制要复制的内容。
完整的命令是:
tar --exclude="outdir" -cvpf - . | (cd TARGET_DIRECTORY; tar -xpf -)
- 因此,任何包含“outdir”模式的路径都将被排除。
- 如果没有该
--exclude
选项,它将复制 TARGET_DIRECTORY 下当前目录的整个结构。 - 您可以将
.
第一个 tar 中的 替换为所需的源目录。
推荐阅读
- python - Scrapy 没有在分页之后填充输出
- swift - 使用 vapor 3 在同一条路线上处理不同类型的 json
- c# - C# - 从 Dictionary 创建 JSON 对象数组
- angular - Angular HttpClient 使套接字保持打开状态
- c++ - 对齐的 malloc c++ 实现
- github - 如何标记、标记或创建 Github 存储库?
- .net - VB.NET 在运行时创建的控件上的意外锚定行为
- vba - VBA 添加相邻单元格
- css - CSS动画比例()不平滑
- logistic-regression - 未满足 logit 线性的逻辑回归假设 (SPSS)