也许最好只是从用例开始。
我有一个大的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
,是否存在执行该命令的命令。
我已经将我目前仍在使用的单个文件的临时解决方法作为答案,因为它可能会对某人有所帮助,尽管这是无法接受的,因为它无法回答不允许使用临时文件的问题
echo bob > bob.txt; echo steve > steve.txt; zip original {bob,steve}.txt; unzip -l original.zip
显示两个文件。现在,使用您的解决方案,unzip -p original.zip | zip -9 new.zip -; unzip -l new.zip
仅重新打包一个名为“-”的“文件”