У меня есть каталог журналов, для которого я хотел бы настроить задание по сжатию с помощьюgzipПроблема в том, что я не хочу повторно сжимать журналы, которые я уже сжал.
Я пробовал использовать ls | grep -v gz | gzip
, но это, похоже, не работает.
Есть ли способ это сделать? По сути, я хочу сжать gzip все файлы в каталоге, которые не заканчиваются на .gz.
решение1
Вы можете просто сделать:
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
' выходных данных