zsh's “echo SomeText ** / filename” em outros shells

4

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'
    
por jofel 16.06.2014 / 07:15

3 respostas

6
find . -name TheFileName -type f -exec sh -c 'for i do
     echo SomeText > "$i"; done' sh {} +
    
por 16.06.2014 / 08:10
1

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 ).

    
por 17.06.2014 / 05:05
0

Um pouco mais curto:

find . -name TheFileName -type f -exec sed -n -i -e '1c SomeText' {} +
    
por 16.06.2014 / 14:04