web-dev-qa-db-ja.com

ディレクトリ内のすべてのファイルを独自の圧縮ファイルに圧縮する

各ファイルの名前を保持しながら、ディレクトリ内のすべてのファイルを独自のtarに圧縮するにはどうすればよいですか?

つまり、file1.out file2.out

->

file1.out.tar.gz file2.out.tar.gz

27
DD.

すべてのファイルを個別のtarファイルに入れても、このシナリオでは意味がありません。 gzipを使用して直接圧縮できます。

gzip *

file1.out.gzfile2.out.gzなどになります。

tarを使用するのは、単一のファイルとして圧縮アーカイブが必要な場合のみです。

すべてのファイルにtarアーカイブが必要な場合は、次のように作成できます。

for i in *; do tar -czf $i.tar.gz $i; done
66
Sven

@SvenWの回答(現在のディレクトリでのみ機能します)に基づいて構築するには、ファイル数が非常に多い場合、または再帰的なディレクトリ構造で実行したい場合も使用できます。

find . -type f -exec gzip \{\} \;

出力を別のディレクトリに配置する必要がある場合(この例では、../target)元のファイルを削除したくない場合は、次のようにします。

find . -type f -print | while read fname ; do
    mkdir -p "../target/`dirname \"$fname\"`"
    gzip -c "$fname" > "../target/$fname.gz"
done
9
fluffy

これを試してください:

#!/bin/bash
for fich in *; do
    if [ "$fich" != "*" ] ; then
        gzip -9 -c $fich > $fich.tar.gz
        \mv $fich.tar.gz $fich
    fi
done
0
Mats