如何从列表中排除文件

我在目录中有 ~100k 文件。我需要删除其中一些文件,不包括(15k 不同模式)模式列表:

Directory: /20210111/
Example files: 
/20210111/xxx_yyy_zzz.zip
/20210111/aaa_bbb_ccc.zip
/20210111/ddd_eee_fff.zip
...

Exclude.list 
ddd
aaa
...

我试过找到:

find /20210111/ -type f -iname "*.zip" ! -iname "*$(cat Exclude.list)*" -exec ...

获取错误:参数太长。因为 exclude.list 有很多行。

我怎样才能做到这一点?

回答

您可以使用grep来过滤 的输出find,然后使用xargs来处理结果列表。

find /20210111/ -type f -iname '*.zip' -print0 
| grep -zvFf Exclude.list - 
| xargs -0 rm
  • -print0-z-0正在使用的空字节的文件名分开的,所以文件名可以包含任何有效的字符(您不能存储包含在你的Exclude.list文字换行模式,反正)。
  • grep-F将模式解释为固定字符串而不是正则表达式。

以上是如何从列表中排除文件的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>