2012-04-18 43 views
3

我有很多zip文件需要重新打包/重新壓縮才能解決MediaWiki 0.1.18中的錯誤。如何在不使用tmp目錄的情況下重新打包zip文件?

我可以

#!/bin/bash 

for f in *zip; do 
    cd tmp 
    rm -rf * 
    unzip ../"$f" 
    zip -r ../"$f" * 
    cd .. 
done 

做,但有沒有辦法做到這一點如與管道或可能是一個zip選項?

+0

'男人拉鍊'據我可以告訴沒有提到任何關於這個,但我可以使用tmp目錄重新打包文件,但我真的想避免這種情況。 – 2012-04-18 11:57:50

回答

2

你不能。如果你發送一些壓縮文件,它就沒有辦法知道一個文件何時結束並且新文件開始了。

其實你可以編寫自己的程序來完成這項工作,但從你的描述來看,它似乎是一種矯枉過正。此外,您並未告知您修復了哪些錯誤,因此無法建議其他解決方法。

+0

我覺得'你不能'在這裏有點強大。有多種方法可以做到這一點。誠然,一個天真的管道不知道文件名,但找到一個循環執行-execdir或簡單的bash腳本。 – Konerak 2012-04-18 13:29:17

+0

請顯示*簡單*腳本。對我來說,在不使用臨時文件/目錄的情況下執行該操作的最簡單方法是在某些zip庫中使用某種腳本語言。我也看不到任何壓縮選項從標準輸入讀取數據。但我認爲可以用<(command)bash語法來製作一些東西,但是一次處理一個文件會很慢。並且會非常難看(作爲代碼)。 – akostadinov 2012-04-25 14:44:25

+0

'echo「這將被壓縮」|「 tee x | zip> x.zip; unzip -p x.zip> y; diff x y;' - x.zip將是x的壓縮版本,x和y將相等。真的,zip可以與STDIN,STDOUT和管道一起使用! – Konerak 2012-04-25 15:01:05

6
gzip -d -c old.gz | gzip >new.gz 
+0

這是真實的.zip文件,可惜不是'.gz'。 – 2012-04-18 11:56:02

+0

那麼,你打開哪個程序使用.zip文件?是否安裝了「zip」和「unzip」?還是7zip? – Konerak 2012-04-18 12:43:56

+0

是的,zip,unzip和7z都在那裏。 – 2012-04-18 12:48:34

1

晚了一些,但它可能是有益的那些誰晚一點:

zipsplit -n 2147483648將重新包裝拉鍊高達2GiB沒有提取。但是,由於此命令用於分割zip文件,因此無法覆蓋原始文件或指定輸出文件,僅輸出目錄。

2

有一個名爲AdvanceCOMP的實用程序,它完全符合您的需求。它重新壓縮ZIP和GZ文件(以及其他一些文件),而不需要中間提取到磁盤。 (我確實認爲使用的機制是解壓縮數據並重新壓縮它,但這不需要將文件寫入磁盤或重新生成元數據。)

+0

無法讓advzip在backup.zip上工作 - 說有CRC錯誤。壓縮文件測試良好。也許這個工具是特定於MAME的? – Sun 2016-08-30 15:50:24

相關問題