"echo SomeText >> **/filename" de zsh en otros shells

"echo SomeText >> **/filename" de zsh en otros shells

Necesito completar todos los archivos con un nombre de archivo específico (recursivamente) con un texto. En zsh esto se puede hacer con

echo SomeText > **/TheFileName

Busco soluciones genéricas para shells compatibles con sh y/o tcsh. ¿Existe una forma más corta/fácil que el siguiente comando?

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

Respuesta1

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

Respuesta2

Puedes usar teepara esto:

Si su shell coincide correctamente **/TheFileNamey el problema es simplemente obtener el contenido de cada archivo:

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

Si el problema es que **/TheFileNameno coincide correctamente, puedes usar find:

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

Si findno lo tiene -exec +, entonces las otras soluciones aquí son apropiadas.

Estos tampoco funcionarán si tiene una gran cantidad de archivos (más de getconf ARG_MAX).

Respuesta3

Un poquito más corto:

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

información relacionada