web-dev-qa-db-ja.com

複数のフォルダをそれぞれ独自のZipアーカイブに圧縮するにはどうすればよいですか?

そのため、各フォルダーを1つの大きなZipファイルではなく、独自のZipアーカイブに圧縮できるスクリプトを作成したいと思います。

例として、私はディレクトリを持っています:

+ MyDirectory/
| |
| + Folder_01/
| |
| + Folder_02/
| |
| + Folder_03/
|

MyDirectoryでスクリプトの実行が完了すると、MyDirectory内にある各フォルダーのZipファイルが作成されます。Folder_01.ZipFolder_02.ZipおよびFolder_03.Zip。私はいくつかのBASHを知っていますが、これは私が理解できないものです。

これはどのように行うことができますか?

敬具。

17
Villi Magg
for i in *
do
[ -d "$i" ] && Zip -r "$i.Zip" "$i"
done

すべてのディレクトリを調べて、それぞれにZipを作成します。

またはさらに簡潔に:

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

(提案してくれたdamienfrancoisに感謝します)。

44
Igor Chubin

ここに

for i in */; do tar -czvf "${i%/}.tar.gz" "$i"; done
5
ahmed zeaad

より小さな出力が必要な場合は、 xz アルゴリズムの使用を検討してください(プロセスが長くなります)。

for d in */ ; do
    outName=$d;
    outName=${outName// /\-};
    outName=${outName//[!0-9a-z-]};
    dirName=$d;
    dirName=${dirName//\/}
    tar -c "$dirName" | xz -e > $outName.tar.xz
done

このコードは、フォルダ名をサニタイズし、現在のディレクトリ内のすべてのフォルダに対して.tar.xzを生成します。

0
Gajus