複数のディレクトリを別々の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終了する前にすべてのバックグラウンド操作が完了するのを待つようにシェルに指示します。

このコードは並列操作の数を制限しないため、現在のディレクトリにフォルダが多すぎるとコンピュータが過負荷になる可能性があります。

答え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
)

関連情報