Executar o conjunto de comandos em cada subdiretório

1

Eu 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, eu quero que ele entre em cada uma, execute esses quatro comandos e, em seguida, vá para a próxima, execute os comandos e repita. Eu tentei combinar várias amostras deste site com meus comandos, mas não consegui fazê-lo funcionar.

    
por jlacroix82 28.06.2012 / 18:15

1 resposta

2

Script

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

One-liner

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

Como funciona

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

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

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

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

    Se for, ... será executado.

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

por 28.06.2012 / 18:40

Tags