find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;
Anda dapat dengan mudah beralih 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.
Ubah gzip
ke echo gzip
untuk pengujian. Atau lewati bagian -exec bersama-sama.
Sunting: Oh, saya lupa menyebutkan bahwa ini tidak memeriksa apakah <target>.gz
sudah ada. Ini mungkin atau mungkin tidak menjadi masalah.
Edit2: Ok, ini dia sesuatu yang memeriksa file yang ada. Jika itu mungkin diinginkan. Maafkan oneliney-ness.
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 '*[~#]' \))
My find
-foo mungkin bukan apa yang bisa dilakukan, sangat mungkin untuk langsung lewati.
*.*
masukls
?