find . -name TheFileName -type f -exec sh -c 'for i do
echo SomeText > "$i"; done' sh {} +
Eu preciso preencher todos os arquivos com um nome de arquivo específico (recursivamente) com um texto. Em zsh isso pode ser feito com
echo SomeText > **/TheFileName
Eu procuro soluções genéricas para shells compatíveis e / ou tcsh. Existe um caminho mais curto / fácil que o seguinte comando?
find . -name "TheFileName" -print0 | xargs -0 sed -n -i -e '1c\nSomeText'
Você pode usar tee
para isso:
Se o seu shell corresponder adequadamente ao **/TheFileName
, o problema é simplesmente obter o conteúdo em cada arquivo:
echo SomeText | tee **/TheFileName >/dev/null
Se o problema é que **/TheFileName
não está correspondendo corretamente, você pode usar find
:
echo SomeText | find . -name TheFileName -exec tee {} + >/dev/null
Se o seu find
não tiver -exec +
, as outras soluções serão apropriadas.
Isso também não funcionará se você tiver um número muito grande de arquivos (maior que getconf ARG_MAX
).
Um pouco mais curto:
find . -name TheFileName -type f -exec sed -n -i -e '1c SomeText' {} +