Мне нужно сжать значительное количество файлов pdf и txt, но я хочу оставить файловую структуру нетронутой. В каталогах есть много-много подкаталогов.
Когда я хочу сжать файлы определенного типа в одном каталоге, я запускаю:
for i in `find | grep -E "\.pdf$|\.txt$"`; do gzip "$i" ; done
но на это у меня ушли бы годы.
Попробуйте это в каталоге верхнего уровня.
find . -type f -mmin +1 '(' -iname '*.txt' -o -iname '*.pdf' ')' -exec gzip {} ';'
Я взял на себя смелость использовать gzip только файлы старше 2 минут, чтобы он не касался файлов, которые, вероятно, в настоящее время будут записаны в (mmin +1
делает это).
Я не уверен, почему ваша существующая «команда» не работает. Однако этот сценарий должен. Запускаем в родительском каталоге.
#!/bin/bash
find . -type f| while read FILE
do
if grep -E "\.pdf$|\.txt$"; then
gzip ${FILE}
fi
done