find . -type f | \
while read -r x
do
gzip -c "$x" > "$x.gz"
done
-c
mendorong hasilnya ke stdout dan menyimpan yang asli saja. Kerugiannya adalah, Anda harus mencari file sendiri. Untuk penjelajahan yang lebih canggih, Anda dapat menggunakan find(1)
, bagaimanapun, seperti di atas:.
pencarian mulai dari direktori saat ini, dan -type f
mengembalikan nama setiap file biasa.
find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;
Anda dapat dengan mudah mengubahnya untuk memasukkan apa yang ingin Anda kompres ( -name '*.txt -or -name '*.html
dll.) daripada seperti sekarang, mengecualikan beberapa file (sudah dikompresi, cadangan, dan file sementara).
Menangani spasi dalam nama file juga baik-baik saja.
Ubah gzip
ke echo gzip
untuk pengujian. Atau lewati bagian -exec secara bersamaan.
Edit: Oh, saya lupa menyebutkan bahwa ini tidak memeriksa apakah <target>.gz
sudah ada. Ini mungkin atau mungkin bukan masalah.
Edit2: Oke, ini dia dengan sesuatu yang memeriksa file yang ada. Jika itu mungkin diinginkan. Maafkan kesendiriannya.
while read file; do if [ ! -f "$file.gz" ]; then echo "Compressing $file"; gzip -c "$file" > "$file.gz"; else echo "Not overwriting $file.gz"; fi done < <(find . -type f -not \( -name '*.gz' -or -name '*[~#]' \))
find
saya -foo mungkin tidak seperti itu, sangat mungkin untuk melewati langsung di find.
gzip -k
opsi
gzip 1.6 (Juni 2013) menambahkan -k, --keep
opsi, jadi sekarang Anda dapat:
gzip -kr .
dan itu tidak akan menghapus file asli Anda.
Ditemukan di:https://unix.stackexchange.com/questions/46786/how-to-tell-gzip-to-keep-original-file