从查找中排除文件列表

新手上路,请多包涵

如果我在运行时要排除的文本文件中有一个文件名列表 find ,我该怎么做?例如,我想做类似的事情:

 find /dir -name "*.gz" -exclude_from skip_files

并获取 /dir 中的所有 .gz 文件,skip_files 中列出的文件除外。但是 find 没有 -exclude_from 标志。如何跳过 skip_files 中的所有文件?

原文由 Thomas Johnson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 737
2 个回答

我不认为 find 有这样的选项,您可以使用 printf 和您的排除列表构建命令:

 find /dir -name "*.gz" $(printf "! -name %s " $(cat skip_files))

这与执行以下操作相同:

 find /dir -name "*.gz" ! -name first_skip ! -name second_skip .... etc

或者,您可以从 find 管道到 grep

 find /dir -name "*.gz" | grep -vFf skip_files

原文由 Josh Jolly 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是我通常从结果中删除一些文件的方法(在这种情况下,我查找了所有文本文件,但对我们到处都有的一堆 valgrind memcheck 报告不感兴趣):

 find . -type f -name '*.txt' ! -name '*mem*.txt'

它似乎正在工作。

原文由 Martin G 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题