重新压缩文件而不创建临时文件

炸土豆饼

也许最好只是从用例开始。
我有一个大的zip文件,里面充满了许多文件,我怀疑它最初是在低压缩级别下压缩的。

我想从该文件创建一个新的zip文件(或者不是一个新文件,希望是就地放置),以确保其压缩良好(-9)而不先将其解压缩到磁盘上(由于各种原因,例如大小和已装入NFS)。所以虽然我可以做

mkdir tmp/ && unzip -d tmp/ A.zip && cd tmp/ && zip -r -9 ../B.zip *; rm -rf tmp/ A.zip

这会(临时)创建大量数据(解压缩的文件B.zipA.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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章