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 tee
para 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 **/TheFileName
a correspondência não está correta, você pode usar find
:
echo SomeText | find . -name TheFileName -exec tee {} + >/dev/null
Se você find
nã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' {} +