"echo SomeText >> **/filename" do zsh em outros shells

"echo SomeText >> **/filename" do zsh em outros shells

Preciso preencher todos os arquivos com um nome de arquivo específico (recursivamente) com um texto. No zsh isso pode ser feito com

echo SomeText > **/TheFileName

Eu procuro soluções genéricas para shells compatíveis com sh e/ou tcsh. Existe uma maneira mais curta/fácil que o seguinte comando?

find . -name "TheFileName" -print0 | xargs -0 sed -n -i -e '1c\nSomeText'

Responder1

find . -name TheFileName -type f -exec sh -c 'for i do
     echo SomeText > "$i"; done' sh {} +

Responder2

Você pode usar teepara isso:

Se o seu shell corresponder corretamente ao **/TheFileName, e o problema for simplesmente obter o conteúdo de cada arquivo:

echo SomeText | tee **/TheFileName >/dev/null

Se o problema for que **/TheFileNamea correspondência não está correta, você pode usar find:

echo SomeText | find . -name TheFileName -exec tee {} + >/dev/null

Se você findnão tiver -exec +, as outras soluções aqui são apropriadas.

Isso também não funcionará se você tiver um número muito grande de arquivos (maior que getconf ARG_MAX).

Responder3

Um pouco mais curto:

find . -name TheFileName -type f -exec sed -n -i -e '1c SomeText' {} +

informação relacionada