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 tee
para esto:
Si su shell coincide correctamente **/TheFileName
y el problema es simplemente obtener el contenido de cada archivo:
echo SomeText | tee **/TheFileName >/dev/null
Si el problema es que **/TheFileName
no coincide correctamente, puedes usar find
:
echo SomeText | find . -name TheFileName -exec tee {} + >/dev/null
Si find
no 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' {} +