次の拡張子を持つファイルでいっぱいのフォルダがあります.dot
。
a.dot
b.dot
c.dot
このフォルダ内のすべてのファイルを参照して、次のようにコマンドを実行したいと思います。
dot -Tpdf a.dot -o a.pdf
dot -Tpdf b.dot -o b.pdf
dot -Tpdf c.dot -o c.pdf
垂直バーを使用し、次のコマンドを実行する必要があるようです。
ls *.dot | dot -Tpdf ... -o ....pdf
しかし、パイプラインが各ファイルを中間部分にのみ配置する方法はわかりません。使用する必要がありますかxargs
?そして延長部分をはずした後、2番目の部分に乗せる方法も出ています。少なくとも正しい方向(使用するシェルコマンド)を教えることができれば、この問題を解決するのに役立ちます。
答え1
使用
for i in *.dat ; do dot -Tpdf "$i" -o "$(basename "$i" dot)pdf" ; done
編集する: スペースを含むファイル名を正しく処理します。
答え2
パラメータファイル名のセットを繰り返す別の方法です。ただし、各反復でファイル名を操作するのに、forループと同じ柔軟性はありません。
ls *.dot | xargs -n1 -I FILE echo dot -Tpdf FILE -o FILE.pdf
結果は次のとおりです。
dot -Tpdf a.dot -o a.dot.pdf
dot -Tpdf b.dot -o b.dot.pdf
dot -Tpdf c.dot -o c.dot.pdf
答え3
あなたがファンなら、次awk
のsed
ような方法でもこれを達成できます。
ls *.dot | awk '{print("dot -Tpdf "$1" -o "$1)}' | sed 's/.dot/.pdf/2' | sh