如何在一组文件上迭代命令?

use*_*ser 4 shell pipe wildcards control-flow

我有一个装满文件的文件夹,其.dot扩展名如下:

a.dot
b.dot
c.dot
Run Code Online (Sandbox Code Playgroud)

我想浏览此文件夹中的所有文件,并对它们运行如下命令:

dot -Tpdf a.dot -o a.pdf
dot -Tpdf b.dot -o b.pdf
dot -Tpdf c.dot -o c.pdf
Run Code Online (Sandbox Code Playgroud)

我猜我需要使用垂直条并执行如下命令:

ls *.dot | dot -Tpdf ... -o ....pdf
Run Code Online (Sandbox Code Playgroud)

但我不知道如何让管道只将每个文件放在中间部分。我应该使用xargs吗?此外,如何剥离扩展然后也将其放置在第二部分上。如果我至少可以指出正确的方向(使用哪个 shell 命令),它将帮助我在解决这个问题的过程中走得更远。

jof*_*fel 6

for i in *.dat ; do dot -Tpdf "$i" -o "$(basename "$i" dot)pdf" ; done
Run Code Online (Sandbox Code Playgroud)

编辑: 正确处理带有空格的文件名。