回答:
このシナリオでは、すべてのファイルを個別のtarファイルに入れても意味がありません。gzip
それらを直接圧縮するために使用できます:
gzip *
なりますfile1.out.gz
、file2.out.gz
など
tar
単一のファイルとして圧縮アーカイブが必要な場合にのみ使用します。
すべてのファイルにtarアーカイブが必要な場合は、次のように作成できます。
for i in *; do tar -czf $i.tar.gz $i; done
find . -maxdepth 1 -type d ! -path . | while read a_dir; do tar -zcvf ${a_dir}.tgz ${a_dir} --remove-files; done
find . -maxdepth 1 -mindepth 1 -type d -exec tar -zcvf {}.tgz {} --remove-files \;
@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
find . -type f -exec gzip {} \;
十分になります。2番目のコードは、スペースなどを含むファイル名で失敗します。
{}
習慣として逃げています)。しかし、他の人はあなたの質問への回答としてすでにそれらを投稿しています。
find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;