Evs*_*ter 61 command-line directory zip
我有一个目录,其中包含数十个目录。
我是命令行新手,我正在努力想出一个命令来将每个子目录压缩到一个唯一的 sub-directory.zip 文件中。
所以最后我的主目录将填充我所有的原始子目录,以及.zip包含每个子目录压缩内容的相应文件。
这样的事情可能吗?如果是这样,请告诉我它是如何完成的。
MvG*_*MvG 108
您可以在bash以下位置使用此循环:
for i in */; do zip -r "${i%/}.zip" "$i"; done
Run Code Online (Sandbox Code Playgroud)
i是循环变量的名称。*/表示当前目录的每个子目录,并将在这些名称中包含一个尾部斜杠。cd在执行此操作之前,请确保您到了正确的位置。"$i"简单地命名该目录,包括尾部斜杠。引号确保目录名称中的空格不会造成麻烦。${i%/}就像$i但删除了尾部斜杠,因此您可以使用它来构造 zip 文件的名称。
如果您想了解它是如何工作的,请在echo之前包含一个zip,您将看到打印的命令而不是执行的命令。
并行执行
要并行运行它们,您可以使用&:
for i in */; do zip -0 -r "${i%/}.zip" "$i" & done; wait
Run Code Online (Sandbox Code Playgroud)
我们wait用来告诉 shell 在退出之前等待所有后台任务完成。
请注意,如果当前目录中的文件夹过多,则可能会使计算机不堪重负,因为此代码不限制并行任务的数量。