我有大约 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 \;
笔记:
总体
-print0/xargs
方法很好,但是 find 的-exec
选项消除了对管道的需求。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'
笔记:
为了在使用通配符(如 )时获得可靠的结果
*
,必须将文件名放在引号内,以便将 glob 直接传递给 zip。否则,shell 可能会在将名称传递给 之前找到匹配项并进行路径名扩展zip
。/*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
删除具有该扩展名的所有文件。