Bagaimana cara mengompres setiap file dalam direktori ke tarnya sendiri sambil mempertahankan nama untuk setiap file?
yaitu file1.out file2.out
->
file1.out.tar.gz file2.out.tar.gz
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
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:sumber
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 {} \;
Coba yang ini:
sumber