CR が含まれている場所を表示する

なぜか CR (キャリッジリターン) コードが含まれてしまっているファイルが散見される。FTP のクライアントやバージョン管理システムのクライアントが自動で LF を CR + LF に変換したものの残骸かもしれない。ともかく CR があるところを全部知りたい。そのうえで除去するか、いかすか決めたい。そんなときが私には訪れた。で、シェルスクリプト

target_dir=app
tmp=tmp.$$
find $target_dir -name "*.php" | while read file; do
    xxd -g1 < $file > $tmp
    grep ' 0d ' $tmp && echo -e "@@@@@\n$file"
done
rm $tmp

ファイル内に ' 0d ' という文字列が含まれていると誤検知するけど、まあとりあえずのようには十分だった。