Мне нужно сжать все файлы в директории отдельно, включая все файлы в подкаталогах без последующего удаления оригиналов. Допустим, у меня есть index.html, в конце я хочу иметь index.html.gzip AND index.html.
Я могу распаковать все файлы в моем каталоге через
gzip -r .
Но я хочу сохранить оригинальные файлы также.
Это возможно?
*.*
вls
?*.*
соответствует всем регулярно именуемым файлам и обычно не содержит каталогов. Конечно, это работает только в большинстве случаев и обычно не, если вам это нужно. Затем используйтеfind
команду.ls *.*
не будет выбирать файлы, такие как TODO .ls
не требуется вообще :for x in *
. Тем не менее, использованиеfind
должно бытьfind . -type f | while read -r x
.-r
включениеread
.Вы можете легко переключать его, чтобы включить то, что вы хотите сжать (
-name '*.txt -or -name '*.html
и т. Д.), А не как сейчас, за исключением некоторых файлов (уже сжатых, резервных и временных файлов).Обрабатывает пробелы в имени файла тоже очень хорошо.
Изменение
gzip
кecho gzip
для тестирования. Или пропустите часть -exec все вместе.Изменить: О, я забыл упомянуть, что это не проверяет, если
<target>.gz
уже существует. Это может или не может быть проблемой.Edit2: Хорошо, здесь мы идем с чем-то, что проверяет существующий файл. Если это может быть желательно. Прошу прощения за единственность.
Мой
find
-foo, возможно, не то, что может быть, вполне возможно пропустить непосредственно в find.источник
Просто добавьте опцию -c, я думаю, что это должно работать
источник
gzip 1.6 (июнь 2013) добавил
-k, --keep
опцию, так что теперь вы можете:Найдено по адресу: /unix/46786/how-to-tell-gzip-to-keep-original-file
источник
Протестировано на Debian (gzip 1.3.12-6)
источник
ls
ненужно, используйте*
.