для всех файлов, найденных в иерархии каталогов (и ее подкаталогах и подкаталогах и т. Д.)
Это задание для find
, просто и просто.
Например, команда:
find . -type f -exec sed -i 's/$/ sample string/' {} \;
выполнит эту команду sed
для всех обычных файлов в и в текущем каталоге.
Команда find
имеет намного больше опций (ограничение глубины, не пересекает границы файловой системы, работает только с определенными масками файлов и т. Д.), Которые вы можете использовать, но, вероятно, все, что вам нужно для ответа на ближайший вопрос, - это те, которые приведены выше.
Имейте в виду, что sed -i
- это редактирование на месте, поэтому, если вы допустили ошибку, вам лучше убедиться, что вы создали резервные копии исходных файлов заранее.
В этом случае где вы хотите создать новые файлы (как требуется в комментарии), вы можете обойти -i
и создавать новые файлы. Возможно, самый безопасный способ сделать это - поместить команды, которые вы хотите выполнить, в исполняемый скрипт (например, myprog.sh
):
#!/usr/bin/env bash
origName="$1"
newName="$1.new"
sed s/$/ sample string/' "${origName}" > "${newName}"
Затем вызвать это из вашего find
:
find . -type f -exec myprog.sh {} \;
Затем вы можете сделать имя целевого файла произвольно сложным значением, рассчитанным из оригинала.