Мне нужно заполнить все файлы с определенным именем (рекурсивно) текстом. В zsh это можно сделать с помощью
echo SomeText > **/TheFileName
Я ищу общие решения для sh-совместимых и/или tcsh оболочек. Есть ли более короткий/легкий способ, чем следующая команда?
find . -name "TheFileName" -print0 | xargs -0 sed -n -i -e '1c\nSomeText'
решение1
find . -name TheFileName -type f -exec sh -c 'for i do
echo SomeText > "$i"; done' sh {} +
решение2
tee
Для этого можно использовать :
Если ваша оболочка правильно соответствует **/TheFileName
, и проблема заключается просто в получении содержимого в каждом файле:
echo SomeText | tee **/TheFileName >/dev/null
Если проблема заключается в **/TheFileName
неправильном соответствии, вы можете использовать find
:
echo SomeText | find . -name TheFileName -exec tee {} + >/dev/null
Если у вас find
его нет -exec +
, то подойдут и другие решения, представленные здесь.
Они также не будут работать, если у вас очень большое количество файлов (больше getconf ARG_MAX
).
решение3
Немного короче:
find . -name TheFileName -type f -exec sed -n -i -e '1c SomeText' {} +