各ファイルの名前を保持しながら、ディレクトリ内のすべてのファイルを独自のtarに圧縮するにはどうすればよいですか?
つまり、file1.out file2.out
->
file1.out.tar.gz file2.out.tar.gz
すべてのファイルを個別のtarファイルに入れても、このシナリオでは意味がありません。 gzip
を使用して直接圧縮できます。
gzip *
file1.out.gz
、file2.out.gz
などになります。
tar
を使用するのは、単一のファイルとして圧縮アーカイブが必要な場合のみです。
すべてのファイルにtarアーカイブが必要な場合は、次のように作成できます。
for i in *; do tar -czf $i.tar.gz $i; done
@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
これを試してください:
#!/bin/bash
for fich in *; do
if [ "$fich" != "*" ] ; then
gzip -9 -c $fich > $fich.tar.gz
\mv $fich.tar.gz $fich
fi
done