我很感谢大家的反馈,尤其是关于如何提出更好的问题。我一直在阅读有关更好的礼仪的更多信息,希望现在我没有违反任何规则。但我意识到我最初的问题措辞不当。通过这个练习,我学到了很多东西,但最终,我花了更少的时间来列出有问题的文件,并手动删除垃圾图像。感谢大家的帮助!我正在转向更有价值的利用我的时间。
我在子目录中有数千个.zip
文件,其中包含一些不同的错误图像,我们将其称为crap.*
。但它们的文件名大小写不同。这些文件的扩展名可能不同,并且在 前面或后面可能有一些额外的字符crap
,例如123crap567.jpg
或-crap-.gif
。
我正在尝试为 Linux 编写一个 bash 脚本来扫描目录,找到带有 的 zip 文件CrAp.PNG
,然后从 zip 文件中删除该文件。下面是我目前得到的代码,但它不起作用。
我相信我正在扫描并找到正确的 zip 文件,并确定“垃圾文件”的确切名称。但我得到了:
zip 错误:无效的命令参数(仅指定一个操作)
我究竟做错了什么?
for i in *.zip; do
[ -f "$i" ] || break
f=$(zipinfo "$i" | grep -i -ho "\S*crap\S*")
if [[ $f ]]; then
zipinfo "$i" | grep -i -ho "\S*crap\S*" | xargs zip -d \'\*\/$i\'
fi
done
答案1
打印出每个“$f”的值,它很可能是错误的。zipinfo
我使用的版本会打印很多行和你不需要的信息 - 包括文件信息 - 因此 grep 可能无法正确生成文件名:
$ zipinfo zip_with_zips.zip
Archive: zip_with_zips.zip
Zip file size: 234464 bytes, number of entries: 4
-rw-a-- 6.3 fat 310 bx defN 22-Jan-27 16:22 2.txt
尝试zipinfo -1 "$i"
在每个地方仅显示文件名,并zip -d "$i"
在最后显示:
f=$(zipinfo -1 "$i" | grep -i -ho "\S*crap\S*")
if [[ $f ]]; then
zipinfo -1 "$i" | grep -i -ho "\S*crap\S*" | xargs zip -d "$i"
fi