Ви можете просто зробити:
gzip *
gzip скаже вам, що він пропускає файли, які вже мають .gz закінчення.
Якщо це повідомлення стає таким, яким ви можете скористатися:
gzip -q *
Те, що ви спробували, не вийшло, оскільки gzipне читає назви файлів для стиснення зі stdin, для цього вам доведеться використовувати:
ls | grep -v gz | xargs gzip
Ви будете виключати файли з шаблоном в gzбудь-якому місці імені файлу, а не лише в кінці. Also Також ви повинні взяти до уваги, що синтаксичний аналіз виводу з lsфайлів небезпечний, якщо у вас є назви файлів з пробілами, новинками тощо.
Більш чисте рішення, не покладаючись на gzipпропуск файлів із .gzзакінченням, також обробляє нестиснені файли у підкаталогах:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Як izkataпрокоментував: використовуючи .gzодин , щоб поліпшити це, не буде працювати. Вам потрібно буде використовувати grep -vF .gzабо grep -v '\.gz$'. Це все ще залишає небезпеку обробки lsвиходу
$щоб було зрозуміліше. І ви все.одно не уникнули , тому лишеgzgz