Command-Line
將多個目錄壓縮成單個 zip 文件的命令
我有一個目錄,其中包含幾十個目錄。
我是命令行新手,我正在努力想出一個命令,將每個子目錄壓縮到一個唯一的 sub-directory.zip 文件中。
所以最後我的主目錄將充滿我所有的原始子目錄,以及
.zip
包含每個子目錄壓縮內容的相應文件。這樣的事情可能嗎?如果是這樣,請告訴我它是如何完成的。
您可以在以下位置使用此循環
bash
:for i in */; do zip -r "${i%/}.zip" "$i"; done
i
是循環變數的名稱。*/
表示目前目錄的每個子目錄,並且將在這些名稱中包含一個斜杠。cd
在執行此操作之前,請確保您到了正確的位置。"$i"
只需命名該目錄,包括尾部斜杠。引號確保目錄名稱中的空格不會造成麻煩。${i%/}
就像$i
但刪除了尾部斜杠,因此您可以使用它來構造 zip 文件的名稱。如果您想了解它是如何工作的,請
echo
在 the 之前添加一個zip
,您將看到列印的命令而不是執行的命令。並行執行
要並行執行它們,您可以使用
&
:for i in */; do zip -0 -r "${i%/}.zip" "$i" & done; wait
我們
wait
用來告訴 shell 在退出之前等待所有後台任務完成。請注意,如果目前目錄中的文件夾過多,則可能會使電腦不堪重負,因為此程式碼不會限制並行任務的數量。