findで取得したファイルを出力したい場合のワンライナー
findコマンドで、ファイル一覧取得して、それを加工して、出力したいときってよくありますよね!!
最近なんでもxargs脳になっていたりするんですが、こういうのはできません。。。
例として、htmlファイル取得してきて、html2rst.py で、rstファイル化したいとします。
find -name '*.html' -print0 |xargs -i -0 python html2rst.py {} > "{}.txt"
まぁ、テストがてらにecho をおいてやると、コマンド自体は正しく発行されてるじゃん!!ってなったりします。
find -name '*.html' -print0 |xargs -i -0 echo "python html2rst.py {} > {}.txt"
python html2rst.py ./01.html > ./01.html.txt python html2rst.py ./02.html > ./02.html.txt python html2rst.py ./03.html > ./03.html.txt : :
そのあと、echo外すと、え!?!?ってなるんですけどね。。。
なので、こんな時は、while readでファイル名を取得してきて対応します。
find -name '*.html'|while read file; do python html2rst.py $file > $file.txt; done;
結構凝り固まった頭になってて、悩むこと多いので、備忘録として。。。
なんとなく、echoでコマンド発行されてるんで、その後を加工してやるとうまくいくような気もするんだけど。。。