Вы можете просто сделать:
gzip *
gzip скажет вам, что пропускает файлы, которые уже имеют .gz окончание.
Если это сообщение мешает, вы можете использовать:
gzip -q *
То, что вы пробовали, не сработало, потому gzipчто не читает имена файлов для сжатия из stdin, чтобы это работало, вы должны использовать:
ls | grep -v gz | xargs gzip
Вы будете исключать файлы с шаблоном в gzлюбом месте имени файла, а не только в его конце. Вы также должны принять к сведению, что анализ выходных данных lsопасен, если у вас есть имена файлов с пробелами, символами новой строки и т. Д.
Более чистое решение, не основанное на gzipпропуске файлов с .gzокончанием, - это также обработка несжатых файлов в подкаталогах:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Как izkataпрокомментировано: использование в .gzодиночку, чтобы улучшить это, не будет работать. Вам нужно будет использовать grep -vF .gzили grep -v '\.gz$'. Это все еще оставляет опасность обработки lsпродукции
$чтобы было понятнее. И вы все равно не избежали., так что это будет исключать только файлы, которые начинаются сgz(так как у них нет «ранее ни одного символаgz»)