Ejecutar conjunto de comandos en cada subdirectorio

Ejecutar conjunto de comandos en cada subdirectorio

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 ... donepasa por estos y ejecuta ...para cada uno.

    En cada caso, $DIRcontiene el nombre de la entrada actual.

  • [ -d "$DIR" ] && ...comprueba si $DIRefectivamente 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.

información relacionada