我想编写一个 bash 脚本,在我不知道确切位置的情况下从 zip 存档中删除某些文件。
我已经走到这一步了:
for file in *.cbz
do
zip -sf "$file" | grep banner | sed 's/^ *//g' | { while read p; do zip -d $file ${p// /\\ } ; done }
done
我在这背后的想法:
zip -sf "$file"
给我存档中的所有文件
| grep banner
这只会让我得到我感兴趣的行。
| sed 's/^ *//g'
我用管道传递其余的 sed 以消除前导空格
| { while read p; do zip -d $file ${p// /\\ } ; done }
剩余的行在这里通过管道传输,以使用抓取的路径+文件名对存档进行 zip 删除。${p// /\ } 应该转义空格,因为简单地使用 $p 会导致 zip 将带有空格的名称作为文件列表进行解释。
但是,转义空格也是如此,所以我想真正的问题是如果文件名包含空格,如何从 zip 存档中删除文件。