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 gzip
tidak 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 gz
di mana saja dalam nama file, tidak hanya di akhir. ¹ Anda juga harus mencatat bahwa parsing output ls
berbahaya ketika Anda memiliki nama file dengan spasi, baris baru, dll., Terlibat.
Solusi yang lebih bersih, tidak bergantung pada gzip
melewatkan file dengan .gz
penutup adalah, yang juga menangani file yang tidak dikompresi dalam subdirektori:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Seperti yang izkata
dikomentari: menggunakan .gz
sendiri untuk meningkatkan ini, tidak akan berhasil. Anda harus menggunakan grep -vF .gz
atau grep -v '\.gz$'
. Itu masih menyisakan bahaya dari pemrosesan ls
output
$
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
")$
akan mengecualikan (-v
) semua file yang memiliki nama yang terdiri dari tiga karakter atau lebih termasuk karakter apa saja yang diikuti oleh "gz" di mana saja dalam nama file. Jadi itu akan termasuk file dengan nama yang dimulai dengan "gz".gz
di mana saja dalam nama (kecuali awal). Jadi, lebih baik jangkar saja. Setelah tidak digunakan$
, terbaca seolah-olah Anda tidak menyadari apa.
artinya dalam sebuah regex, maka dari itu komentar yang membingungkan.