【问题标题】:Bash copy files recursively exclude list of some filesBash 复制文件递归地排除某些文件的列表
【发布时间】:2020-12-24 09:11:47
【问题描述】:

尝试将文件从目录 (d1) 递归复制到目录 (d2) 使用列表排除一些文件和文件夹: 要排除的文件路径存储为 files.txt 和目录列表排除存储为 dirs.txt

已经阅读了一些 SOF 文章,例如 Copy folder recursively, excluding some folders BASH copy all files except one

试过rsync

rsync -avr --exclude=*/exclude_filename_* d1/ d2/

但通配符也不适合,因为有大量不同的文件名。 也许我必须使用带有 rsync 的 WHILE 循环..?仍在寻找解决方案。 有人知道怎么做吗?

【问题讨论】:

  • man rsync--exclude-from=FILE read exclude patterns from FILE 所以让rsync 读取要从每个文件中排除的文件。您可以使用两个--exclude-from= 选项。另请参阅--filter=RULE 选项,它为您提供了一种稍微不同的方式来控制从传输中过滤哪些文件。
  • 是的,我还在寻找
  • 请提供minimal reproducible example。你想让它做什么,它现在在做什么,...?

标签: bash shell unix scripting


【解决方案1】:

这不是最好的方法,但如果 rsync 不起作用,您可以使用 find 组合一个列表,然后从该列表中删除文件。

find . -name "*" | grep -v "<filename you dont want>" | xargs -i cp --parents {} /output/dir/name

这里唯一要记住的是,您的当前目录必须是您要复制的文件的基目录,以保留父结构。

注意: 添加另一个| grep -v "&lt;filename you dont want&gt;" 以删除第二个文件。或者,您可以在一个 grep 中使用通配符匹配 grep -v "&lt;file1&gt;\|&lt;file2&gt;"

【讨论】:

    猜你喜欢
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多