2015-06-21 117 views
1

如何在zip文件中不包含父文件夾的情況下批量壓縮子目錄中的文件夾?我有一個文件夾結構是這樣的:遍歷目錄和壓縮某些子目錄

folder01 
    folder02 
     file01 
     file02 

當我運行:

find . -type d -name "folder02" -exec zip -r '{}'.zip '{}' \; 

我得到「folder02.zip」總是提取其內容到父文件夾「FOLDER01」。我怎樣才能防止這一點?對我來說,它在其他任何地方提取這些檔案時創建無用的父文件夾結構。

+0

嘗試更換'\;''用+' – anishsane

+0

這爲所有的文件夾,而不是單獨的ZIP文件爲每個文件夾一個ZIP文件中。 – awado

回答

0

使用一些簡單的bash:

find . -type d -name "folder02" -exec bash -c 'cd "$(dirname "{}")"; zip -r "$(basename "{}")".zip "$(basename "{}")"' \; 
+0

謝謝!接近完美。它回答了我的問題。還有一個問題:當我使用-m選項運行zip(移入zip和delete)時,它基本上可以工作,但吐出錯誤,它不能刪除那些已經被刪除的項目。在執行bash命令時是否有任何排隊需要考慮? – awado

+0

如果你有名字包含'''的目錄,則失敗。試試這個:'find。-type d -name「folder02」-execdir bash -c'zip -r「$(basename」$ 1「)」.zip「 $(basename「$ 1」)「'sh {} \;' – lcd047

+0

哦......不知道有關'execdir'。在我以前的嘗試中(用''替換'\;'''''''''''' ... – anishsane