Используйте gzip для сжатия файлов в каталоге, за исключением уже существующих файлов .gz.

Используйте gzip для сжатия файлов в каталоге, за исключением уже существующих файлов .gz.

У меня есть каталог журналов, для которого я хотел бы настроить задание по сжатию с помощью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' выходных данных

Связанный контент