Use
for i in *.dat ; do dot -Tpdf "$i" -o "$(basename "$i" dot)pdf" ; done
EDITAR: Manipulação correta de nomes de arquivos com espaços em branco.
Eu tenho uma pasta cheia de arquivos com uma extensão .dot
como esta:
a.dot
b.dot
c.dot
Eu quero passar por todos os arquivos nesta pasta e executar um comando neles como este:
dot -Tpdf a.dot -o a.pdf
dot -Tpdf b.dot -o b.pdf
dot -Tpdf c.dot -o c.pdf
Acredito que preciso usar a barra vertical e fazer um comando assim:
ls *.dot | dot -Tpdf ... -o ....pdf
Mas eu não sei como fazer o pipe colocar cada arquivo apenas na parte central. Devo estar usando xargs
? Além disso, como extrair a extensão, coloque-a na segunda parte. Se eu pudesse ser pelo menos apontado na direção certa (qual comando shell usar), isso me ajudaria muito ao longo do caminho para descobrir isso.
xargs é outro método para iterar sobre um conjunto de nomes de arquivos. No entanto, você não tem a mesma flexibilidade que um loop for para manipular o nome do arquivo em cada iteração:
ls *.dot | xargs -n1 -I FILE echo dot -Tpdf FILE -o FILE.pdf
resultará em
dot -Tpdf a.dot -o a.dot.pdf
dot -Tpdf b.dot -o b.dot.pdf
dot -Tpdf c.dot -o c.dot.pdf
Se você é fã de awk
e sed
, também pode conseguir isso com
ls *.dot | awk '{print("dot -Tpdf "$1" -o "$1)}' | sed 's/.dot/.pdf/2' | sh
Tags pipe wildcards shell control-flow