Вы можете просто сделать:
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
»)$
переходе к exclude (-v
) для всех файлов, имена которых состоят из трех или более символов, включая любой символ, за которым следует «gz» в любом месте имени файла. Поэтому он будет включать файлы с именами, которые начинаются с "gz".gz
любым именем в названии (кроме начала). Так что лучше все равно закрепить. Не использовав$
, выглядело так, как будто вы не поняли, что.
означает регулярное выражение, отсюда и остальная часть запутанного комментария.