将文件名部分匹配到文本文件并相应删除的最有效方法?

将文件名部分匹配到文本文件并相应删除的最有效方法?

我有一个包含大约 1000 个条目的文件,如下所示:

...
U9FzgsF2T-s
...

基本上都是 YouTube 视频 ID。然后我有一个充满视频的文件夹,其名称如下:

007  - James Bond  - Theme-U9FzgsF2T-s.opus

现在我想删除文件夹中与文本文件中的条目不部分匹配的所有文件(当然文本文件除外,无法删除它)。

有什么优雅的方法可以做到这一点?我知道我可以循环遍历所有文件并检查它们是否已列出,但在 1000 个条目和不断增长的情况下,这将花费大量时间,特别是因为该脚本每隔几分钟执行一次。那么我怎样才能有效地做到这一点呢?基本上删除与文件夹中的条目不部分匹配的每个文件?

答案1

也许是grep -v针对 id-list 中的字符串的文件列表。就像是:

printf '%s\0' * | grep -zvF -e ID-LIST -f ID-LIST | xargs -0 echo
  • 替换echorm以删除文件

相关内容