Execute o conjunto de comandos em cada subdiretório

Execute o conjunto de comandos em cada subdiretório

Tenho os seguintes comandos que gostaria de executar dentro de cada subdiretório do diretório de trabalho atual. Aqui estão os comandos:

OUTPUTFN=`basename $PWD`
cat *.xml > $OUTPUTFN.txt
mv $OUTPUTFN.txt $OUTPUTFN.xml
mv $OUTPUTFN.xml ..

Existem mais de 700 pastas neste diretório, quero que ele vá para cada uma, execute esses quatro comandos e depois vá para a próxima, execute os comandos e repita. Tentei combinar vários exemplos deste site com meus comandos, mas não consigo fazer funcionar.

Responder1

Roteiro

for DIR in *; do
    [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"
done

Uma linha

for DIR in *; do [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"; done

Como funciona

  • Bash se expande *para todos os arquivos e diretórios no diretório atual.

  • for DIR in *; do ... donepassa por eles e executa ...para cada um.

    Em cada caso, $DIRcontém o nome da entrada atual.

  • [ -d "$DIR" ] && ...verifica se $DIRé realmente um diretório (e não um arquivo).

    Se for, ...é executado.

  • cat "$DIR"/*.xml > "$DIR.xml"faz exatamente o que suas quatro linhas de código fazem.

informação relacionada