
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 ... 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
é 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.