Найдите и заархивируйте отдельные файлы и удалите исходный

Como escribió @steeldriver, use =en lugar de -eq.

1
05.07.2019, 14:41
1 ответ

Рассмотрим:

$ 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 .

1
20.05.2021, 21:35

Теги

Похожие вопросы