![将文件名部分匹配到文本文件并相应删除的最有效方法?](https://linux22.com/image/168468/%E5%B0%86%E6%96%87%E4%BB%B6%E5%90%8D%E9%83%A8%E5%88%86%E5%8C%B9%E9%85%8D%E5%88%B0%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E5%B9%B6%E7%9B%B8%E5%BA%94%E5%88%A0%E9%99%A4%E7%9A%84%E6%9C%80%E6%9C%89%E6%95%88%E6%96%B9%E6%B3%95%EF%BC%9F.png)
我有一个包含大约 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
- 替换
echo
为rm
以删除文件