将多个目录压缩到单独的 zip 文件中的命令

将多个目录压缩到单独的 zip 文件中的命令

我有一个目录,其中包含数十个目录。

我是命令行新手,我正在努力想出一个命令来将每个子目录压缩到一个唯一的 sub-directory.zip 文件中。

所以最后我的主目录将填充我所有的原始子目录,以及.zip包含每个子目录压缩内容的相应文件。

这样的事情可能吗?如果是这样,请告诉我它是如何完成的。

答案1

您可以在以下位置使用此循环bash

for i in */; do zip -r "${i%/}.zip" "$i"; done

i是循环变量的名称。*/表示当前目录的每个子目录,并且在这些名称中包含尾部斜杠。在执行此操作之前,请确保您cd位于正确的位置。"$i"只需命名该目录,包括尾部斜杠。引号确保目录名称中的空格不会造成麻烦。${i%/}类似于$i但删除了尾部斜杠,因此您可以使用它来构造 zip 文件的名称。

如果您想了解其工作原理,请在echo之前添加zip,您将看到打印的命令而不是执行的命令。

并行执行

要并行运行它们,您可以使用&

for i in */; do zip -0 -r "${i%/}.zip" "$i" & done; wait

我们用来wait告诉 shell 等待所有后台任务完成后再退出。

请注意,如果当前目录中有太多文件夹,则您的计算机可能会不堪重负,因为此代码不限制并行任务的数量。

答案2

如果您想在 Windows/Batch 上执行此操作,这里有一个我整理的类似脚本。

@ECHO OFF
REM Cycle Through all of the directories in the current folder
for /D %%d in (*) do (
    REM Change to the directory
    pushd %%d
    REM Make the destination directory.
    mkdir "Z:\%%d"

    REM Cycle Through all Subdirectories
    for /D %%b in (*) do (
        REM Zip up all subdirectores, and put it in the destination.
        7z -r a "Z:\%%d\%%b.zip" %%b
    )
    popd
)

相关内容