読者です 読者をやめる 読者になる 読者になる

argius note

プログラミング関連

開発しています



複数ファイルの改行コードをCRLF→LF変換

Unix-like Perl

操作を誤ると危険なコマンドです。自己責任でお願いします。

今更ながら、ファイル一括変換の方法を。
次のコマンドは、カレントディレクトリ以下のhtmlファイルの改行コードを一括でCRLF→LFに変換します。

$ find . -name "*.html" | xargs perl -i.bak -pe "s/\r\n/\n/"

ファイルの特定は、findコマンドで行い、特定したファイルを、xargsでperlに渡します。perlは元のファイルを別名にして保存し、変換結果を元のファイルに出力します*1
peオプションは、次のコードと同等の動作になりますので、正規表現だけでなく、演算子や関数なども当然使えます。

while (<>) { # < file
  s/\r\n/\n/; # ここに行の操作を書く
  print; # > file
}


追記(2009.07.30): 元のファイルのタイムスタンプをコピーしたい場合は、"touch -r"を使います。

$ find . -name "*.html" -exec touch -r {}.bak {} \;

*1:perlの代わりにsedなど使っても同様のことができますが、ここでは説明しません。