删除多个 ZIP 文件中的特定文件名

删除多个 ZIP 文件中的特定文件名

我有大约 800 个 zip 文件。我按照此问题删除每个文件中的文件。 如何删除多个 Zip 文件中的多个文件?

我试过

find /myfolder -iname '*.zip' -print0|xargs -0 -i zip -d photo1.jpg

但它确实返回了错误

xargs: zip: No such file or directory

我确信我将文件放在了正确的目录中。有人能帮我吗?

非常感谢您的回答。谢谢,

答案1

尝试:

find /myfolder -iname '*.zip' -exec zip -d {} photo1.jpg \;

笔记:

  1. 总体-print0/xargs方法很好,但是 find 的-exec选项消除了对管道的需求。

  2. zip 文件的名称需要位于要删除的文件的名称之前。

如果您更喜欢管道,请尝试:

find /myfolder -iname '*.zip' -print0 | xargs -0 -i zip -d {} photo1.jpg

或者,由于-i已被弃用:

find /myfolder -iname '*.zip' -print0 | xargs -0 -I{} zip -d {} photo1.jpg

从 zip 的子目录中删除文件

photo1.jpg仅当文件位于 zip 文件的根目录中时,上述命令才会删除。photo1.jpg要从 zip 内的任何子目录中删除,请执行以下操作:

find /myfolder -iname '*.zip' -print0 | xargs -0 -I{} zip -d {} '*/photo1.jpg'

笔记:

  1. 为了在使用通配符(如 )时获得可靠的结果*,必须将文件名放在引号内,以便将 glob 直接传递给 zip。否则,shell 可能会在将名称传递给 之前找到匹配项并进行路径名扩展zip

  2. /*photo1.jpg和有很大区别*/photo1.jpg。前者将导致删除所有名称以 结尾的文件photo1.jpg。这包括文件名如abcphoto1.jpg。后者只会删除实际名为 的文件photo1.jpg

答案2

我找到了这个问题的最终解决方案。下面的命令将删除 zip 中的所有文件及其所有具有特定文件名的子目录。

find /myfolder -iname '*.zip' -print0 | xargs -0 -i zip -d {} /*photo1.jpg

/*只需在文件名前添加即可删除特定文件或/*.extension删除具有该扩展名的所有文件。

相关内容