フォルダ以下のファイルすべての改行コード(CR+LF)を LF に変換するプログラム

what

改行コードが CR+LF のものを LF に変換する。

Windowsで開発したソフトのコードの改行コードが CR+LF になっており、それを本番の Linux 環境で動かそうとすると、symtax error がおきて困ったので、すべて LF にするプログラムを作成を試みました。


Linuxコマンド tr を使ってみる

改行コードの変換


プログラム(shell)
rails_root_path=/path/to/rails/root

sudo updatedb
locate $rails_root_path | grep -v "/.svn" > rails_app_file_list
exec 3< rails_app_file_list
while read old_file 0<&3
do

if [ -f $old_file ]
then
 new_file=$old_file-new_file
 tr -d \\r <$old_file> $new_file
 rm -fr $old_file
 mv $new_file $old_file
fi

done
exec 3<&-


たしかに、Railsアプリすべてのファイルに含まれる CR+LF は LF になります。

しかし、CR のみの改行コードがあった場合 削除されるだけなので、改行がなくなってしまうというところが、よろしくない・・・。
CR は絶対ない!という条件が条件になります。


あとで、改良しよう。。とりあえずさらす。


環境

Linux version 2.6.22.18-co-0.7.3 (hn@coLinux) (gcc version 4.1.2)


dos2unix

コメントにある、dos2unix を利用してみました。
CR+LF → LF は dos2unix の方が便利でした。

  • dox2unix install
$ sudo apt-get install sysutils
  • dos2unix を使ったプログラム
rails_root_path=/path/to/rails/root

sudo updatedb
locate $rails_root_path | grep -v "/.svn" > rails_app_file_list
exec 3< rails_app_file_list
while read rails_file 0<&3
do

if [ -f $rails_file ]
then
dos2unix $rails_file
fi

done
exec 3<&-

こんな便利なコマンドがあったなんて・・・。


nkf (CR+LF → LF, CR → LF 変換を同時にやる)

このエントリーの趣旨とは異なりますが、CR → LF もやりたいです。

これは、 nkf コマンドを使ってみました。
これだと、CR+LF → LF, CR → LF 変換を同時にやれます。

  • プログラム
rails_root_path=/path/to/rails/root

sudo updatedb
locate $rails_root_path | grep -v "/.svn" | grep -v ".jpg" | grep -v ".jpeg" | grep -v ".gif" | grep -v ".png" | grep -v ".csv" | grep -v ".dat" > rails_app_file_list
exec 3< rails_app_file_list
while read old_file 0<&3
do

if [ -f $old_file ]
then
new_file=$old_file-new_file
nkf -Luw $old_file > $new_file
rm -fr $old_file
mv $new_file $old_file
fi

done
exec 3<&-

nkf文字コードを指定します。上記は utf-8 の例です。