
Tengo los siguientes comandos que me gustaría ejecutar dentro de cada subdirectorio del directorio de trabajo actual. Aquí están los comandos:
OUTPUTFN=`basename $PWD`
cat *.xml > $OUTPUTFN.txt
mv $OUTPUTFN.txt $OUTPUTFN.xml
mv $OUTPUTFN.xml ..
Hay más de 700 carpetas en este directorio, quiero que vaya a cada una, ejecute esos cuatro comandos y luego vaya a la siguiente, ejecute los comandos y repita. Intenté combinar varias muestras de este sitio con mis comandos pero no puedo hacerlo funcionar.
Respuesta1
Guion
for DIR in *; do
[ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"
done
Un trazador de líneas
for DIR in *; do [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"; done
Cómo funciona
Bash se expande
*
a todos los archivos y directorios del directorio actual.for DIR in *; do ... done
pasa por estos y ejecuta...
para cada uno.En cada caso,
$DIR
contiene el nombre de la entrada actual.[ -d "$DIR" ] && ...
comprueba si$DIR
efectivamente es un directorio (y no un archivo).Si es así,
...
se ejecuta.cat "$DIR"/*.xml > "$DIR.xml"
hace precisamente lo que hacen sus cuatro líneas de código.