2012-09-07 39 views
10

我需要一個shell腳本,基本上沒有這種移動:腳本創建單獨的zip文件每個.txt文件,找到後

  • 搜索文件夾中的所有txt文件,併爲每一個它發現,創建一個單獨的zip文件,它與找到的txt文件+ .zip相同。
  • 之後,將創建的zip文件移動到txt文件。

基本上它的一個腳本來替換一個txt文件列表作爲它的zip等價物,但保持相同的名稱。

我已經使用發現找到我想要的zip文件:

find . -name '.txt.' -print 

結果是:

./InstructionManager.txt.0 
./InstructionManager.txt.1 

這些都是我要單獨壓縮(當然的文件他們會多很多),但不知道如何使用它們作爲參數單獨進行化妝commans像:

zip ./InstructionManager.txt.0.zip ./InstructionManager.txt.0 
mv ./InstructionManager.txt.0.zip ./InstructionManager.txt.0 
zip ./InstructionManager.txt.1.zip ./InstructionManager.txt.1 
mv ./InstructionManager.txt.1.zip ./InstructionManager.txt.1 

任何想法?不,我不想用所有文件的zip:■ 感謝

+0

這是一個單線呃用'find'。你嘗試了什麼? –

+0

找。 -name'* .txt。*'-print – catteneo

+0

用一些更多信息編輯帖子。 – catteneo

回答

14
find . -name '*.txt.*' -print -exec zip '{}'.zip '{}' \; -exec mv '{}'.zip '{}' \; 
  • 找到.txt文件
  • 第一-exec拉鍊文件
  • 第二個-exec將壓縮文件重命名爲原始名稱

請注意,此過程會覆蓋原始文件。可以肯定的是,新的文件是真實的zip文件,你可以這樣做:

file InstructionManager.txt.* 

應返回:

InstructionManager.txt.0: Zip archive data, at least v1.0 to extract 
InstructionManager.txt.1: Zip archive data, at least v1.0 to extract 
+0

就像魅力一樣工作! :D但現在需要更多的增強。例如,由於文件保持不變,如果腳本再次運行,它在zip內部的zip內創建了一個zip .....是否可以僅將該文件InstructionManager.txt。*命令的輸出用於運行腳本如果它是一個真正的txt文件?但謝謝你的第一個:D – catteneo

+0

哦,另一個*如果* 像這樣刪除,cd/mnt/usb-storage/Logs/&& ls -t1/mnt/usb-storage/Logs/tail -n +5 | xargs rm -r 壓縮每個文件,這是真正的txt文件,並且不是最後5個修改文件之一? – catteneo

5

使用查找和ZIP:

find . -name '*.txt.*' -exec zip '{}.zip' '{}' \; 
1

隨着findxargs,文件名以接受空格:

find . -name '*.txt.*' -print0 | xargs -0 -r -n1 -I % sh -c '{ zip %.zip %; mv %.zip %;}' 

文件被壓縮,然後重命名爲它們的原始名稱

相關問題