¿Cómo iterar un command sobre un set de files?

Tengo una carpeta llena de files con una extensión .dot como esta:

 a.dot b.dot c.dot 

Quiero examinar todos los files en esta carpeta y ejecutar un command sobre ellos como este:

 dot -Tpdf a.dot -o a.pdf dot -Tpdf b.dot -o b.pdf dot -Tpdf c.dot -o c.pdf 

Supongo que necesito usar la barra vertical y hacer un command como este:

 ls *.dot | dot -Tpdf ... -o ....pdf 

Pero no sé cómo hacer que la tubería coloque cada file solo en la parte central. ¿Debo usar xargs ? Además, cómo quitar la extensión y luego colocarla en la segunda parte. Si pudiera al less apuntar en la dirección correcta (qué command de shell usar) me ayudaría mucho en el path para descifrar esto.

Utilizar

 for i in *.dat ; do dot -Tpdf "$i" -o "$(basename "$i" dot)pdf" ; done 

EDIT: manejo correcto de nombres de files con espacios en blanco.

xargs es otro método para iterar sobre un set de nombres de files. Sin embargo, no tiene la misma flexibilidad que un bucle for para manipular el nombre de file en cada iteración:

 ls *.dot | xargs -n1 -I FILE echo dot -Tpdf FILE -o FILE.pdf 

resultará en

 dot -Tpdf a.dot -o a.dot.pdf dot -Tpdf b.dot -o b.dot.pdf dot -Tpdf c.dot -o c.dot.pdf 

Si eres fanático de awk y sed , también puedes lograrlo con

 ls *.dot | awk '{print("dot -Tpdf "$1" -o "$1)}' | sed 's/.dot/.pdf/2' | sh