Jawaban:
Menempatkan setiap file ke file tar terpisah tidak masuk akal dalam skenario ini. Anda dapat menggunakannya gzip
untuk kompres secara langsung:
gzip *
akan menghasilkan file1.out.gz
, file2.out.gz
dll.
Anda tar
hanya akan menggunakan jika Anda membutuhkan arsip terkompresi sebagai satu file.
Jika Anda membutuhkan arsip tar untuk setiap file, Anda dapat membuatnya seperti:
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 \;
Untuk membangun jawaban @ SvenW (yang hanya akan berfungsi pada direktori saat ini), jika Anda memiliki sejumlah besar file atau ingin melakukannya pada struktur direktori rekursif Anda juga dapat menggunakan
find . -type f -exec gzip \{\} \;
dan jika Anda perlu memasukkan output ke direktori yang berbeda (dalam contoh ini, ../target
) dan tidak ingin menghapus yang asli, Anda dapat melakukan sesuatu seperti:
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 {} \;
akan cukup. Kode kedua akan gagal dengan nama file yang mengandung spasi dan sejenisnya.
{}
sebagai kekuatan kebiasaan). Yang lain sudah mempostingnya sebagai jawaban untuk pertanyaan Anda.
find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;