zsh "echo SomeText >> **/filename" в других оболочках

zsh "echo SomeText >> **/filename" в других оболочках

Мне нужно заполнить все файлы с определенным именем (рекурсивно) текстом. В 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' {} +

Связанный контент