2. ちょっと高度な方法

これだとカレント・ディレクトリのファイルだけが対象になりますが、もっと 下のディレクトリにあるもの まで、 まとめて対象にしたい 場合は、find と組み合わせて使います。

perl -p -i.bak -e 'tr/\x0D\x0A//d' `find . -regex ".*\.html?" -print`

`...` で囲まれたコマンドの出力結果が、引数 (アーギュメント) として展開されます。

find . -regex ".*\.html?" -print では、カレント・ディレクトリから下にある、拡張子が .htm または .html であるファイルを見つけて、リスト出力するので、この結果、これが perl の引数(アーギュメント) に渡ります。

実はこれには欠点があります。コマンドの引数(アーギュメント)として渡せるサイズには、限界があり、ファイル数があまりに多くなると、エラーになり、コマンド perl は実行されません。

では、どうするかと言うと…・

find . -regex ".*\.html?" -print | xargs perl -p -i.bak -e 'tr/\x0D\x0A//d'

とします。 xargs は、標準入力から読み込んだものを、引数(アーギュメント) として渡せる範囲までに切り分け、 xargs の引数に指定されたコマンドの 引数(アーギュメント) に渡して、コマンドを実行します。要するに

perl -p -i.bak -e 'tr/\x0D\x0A//d' ファイル名 ...
perl -p -i.bak -e 'tr/\x0D\x0A//d' ファイル名 ...
perl -p -i.bak -e 'tr/\x0D\x0A//d' ファイル名 ...
...

と自動的に分割して実行してくれることになります。

出来上がったウェブ・ページをチェックして、バックアップの *.bak が要らなくなったら、以下のコマンドで削除することもできます。

find . -regex ".*\.bak" -print | xargs rm

新着記事