也许最好只是从用例开始。
我有一个大的zip文件,里面充满了许多文件,我怀疑它最初是在低压缩级别下压缩的。
我想从该文件创建一个新的zip文件(或者不是一个新文件,希望是就地放置),以确保其压缩良好(-9
)而不先将其解压缩到磁盘上(由于各种原因,例如大小和已装入NFS)。所以虽然我可以做
mkdir tmp/ && unzip -d tmp/ A.zip && cd tmp/ && zip -r -9 ../B.zip *; rm -rf tmp/ A.zip
这会(临时)创建大量数据(解压缩的文件并B.zip
在A.zip
删除之前就存在)。
我真的想要一些类似的东西:
rezip -9 A.zip
或者,解决B.zip
:
unzip -<output to stdout> A.zip | zip -9 B.zip && rm -f A.zip
但是我意识到这不可能真正实现,因为管道将用于多个文件,而文件名之类的东西将丢失。
所以,我想知道是否有一种方法可以在每个文件上执行一些代码,例如 find -exec <command>
unzip A.zip -exec zip -r B.zip && rm -f A.zip
但是同样,不确定该如何工作,或者不确定是否通过unzip
/来实现zip
,是否存在执行该命令的命令。
我将我目前仍在使用的单个文件的临时解决方法作为答案,因为它可能会对某人有所帮助,尽管这是无法接受的,因为它无法回答不允许使用临时文件的问题
已经有一段时间了,但是这是您的操作方法。
适用于名称和子目录中带有空格的文件。
zipinfo -1 A.zip | while read filename
do
unzip -p A.zip "$filename" | zip -9 A.zip -
zip --delete A.zip "$filename"
printf "@ -\n@=$filename\n" | zipnote -w A.zip
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句