Anda bisa melakukannya:
gzip *
gzip akan memberi tahu Anda bahwa ia melompati file yang sudah memiliki .gz akhiran.
Jika pesan itu menghalangi Anda, Anda dapat menggunakan:
gzip -q *
Apa yang Anda coba tidak berhasil, karena gziptidak membaca nama file file untuk dikompresi dari stdin, untuk itu untuk bekerja Anda harus menggunakan:
ls | grep -v gz | xargs gzip
Anda akan mengecualikan file dengan pola gzdi mana saja dalam nama file, tidak hanya di akhir. ¹ Anda juga harus mencatat bahwa parsing output lsberbahaya ketika Anda memiliki nama file dengan spasi, baris baru, dll., Terlibat.
Solusi yang lebih bersih, tidak bergantung pada gzipmelewatkan file dengan .gzpenutup adalah, yang juga menangani file yang tidak dikompresi dalam subdirektori:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Seperti yang izkatadikomentari: menggunakan .gzsendiri untuk meningkatkan ini, tidak akan berhasil. Anda harus menggunakan grep -vF .gzatau grep -v '\.gz$'. Itu masih menyisakan bahaya dari pemrosesan lsoutput
$jadi lebih jelas. Dan Anda tidak melarikan diri., jadi itu hanya akan mengecualikan file yang dimulai dengangz(karena mereka tidak memiliki "karakter apa pun sebelumnyagz")