Рассмотрим:
$ ls -1
a.txt
b.txt
c.txt
d.jpg
Следующая команда заархивирует каждый .txt
файл в текущем каталоге и удалит исходный файл:
find. -maxdepth 1 -type f -name '*.txt' -exec zip -Tm {}.zip {} \;
Результат:
$ ls -1
a.txt.zip
b.txt.zip
c.txt.zip
d.jpg
Примечание :мы использовали опцию -T
для проверки целостности архива перед удалением входного файла. Это рекомендуется на справочной странице zip
для опции -m
.
Обратите внимание, что часть .txt
по-прежнему присутствует в имени файла. Так же ведет себя и gzip
.
Удаление части .txt
:
Если вы не хотите, чтобы часть .txt
оставалась в имени файла, выполните следующую команду:
find. -maxdepth 1 -type f -name '*.txt' -exec bash -c \
'zip -Tm "${1%.txt}".zip "$1"' _ {} \;
Результат:
$ ls -1
a.zip
b.zip
c.zip
d.jpg
Обратите внимание, :мы предоставили _
в качестве 0-го аргумента сценарию оболочки, чтобы позиционные аргументы нашего сценария начинались с 1, как обычно. Можно было использовать любое значение. Это обсуждается в BashFAQ .