Command-Line

將多個目錄壓縮成單個 zip 文件的命令

  • July 2, 2020

我有一個目錄,其中包含幾十個目錄。

我是命令行新手,我正在努力想出一個命令,將每個子目錄壓縮到一個唯一的 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 在退出之前等待所有後台任務完成。

請注意,如果目前目錄中的文件夾過多,則可能會使電腦不堪重負,因為此程式碼不會限制並行任務的數量。

引用自:https://unix.stackexchange.com/questions/68489