CRLFからLFへ


備忘録シリーズです...

過去にチームでWindowsのひとがいた際に、大変になったので共有します。
効率的なものがありましたら、教えてください!!

CRLFの改行コード検索

find . -type f | xargs file | grep CRLF

CRLFから変更

☆一つづつ削除

nkf -Lu --overwrite ファイル名orファイルパス

☆一括削除

find . -type f | xargs nkf -Lu --overwrite

☆Gitを含む場合

Gitが壊れて焦ったので、Gitでなくともバイナリファイルは含まないようにした方が良いと思います。

find . -type f | grep -v '.git/' | xargs -n 10 file | grep CRLF | xargs nkf -Lu --overwrite

[処理の流れ]
全ファイルを検索
→Gitディレクトリを含めず検索
→10行づつファイルを出力する
→CRLFを含むファイルを検索
→NKFコマンドで「-Lu(LF)」に変換する

☆Gitを含まない場合

find . -type f | xargs -n 10 file | grep CRLF | xargs nkf -Lu --overwrite

[処理の流れ]
全ファイルを検索
→10行づつファイルを出力する
→CRLFを含むファイルを検索
→NKFコマンドで「-Lu(LF)」に変換する

感想

シェルにして置くと楽そうですね!

201110 追記
shellscript/commandファイルとしてコード化しました!
冗長なのでいずれ直したいと思います。

ソース

changeLF.command
#!/bin/sh

# command実行場所指定
cd `dirname $0`

function command_check {
  command -v "$1" > /dev/null
}

echo "nkfコマンドの存在をチェックします。"
if ! command_check nkf ; then
  if ! command_check brew ; then
    set -e
    echo "Homebrewのインストールをします。"
    echo "Macにログインした際のパスワードを入力してください!"
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    echo "Homebrewのインストールを完了しました。"
  fi
  brew install nkf
fi
echo "nkfコマンドの存在をチェックしました。"

echo "CRLFファイルを検索します。"
crlf=$(find . -type f | grep -v '.git/' | xargs -n 10 file | grep CRLF)
if [ -f ${crlf} ]; then
  echo "CRLFファイルはありませんでした。"
else
  echo "${crlf}"
  echo "CRLFファイルをLFに変換します。"
  find . -type f | grep -v '.git/' | xargs -n 10 file | grep CRLF | xargs nkf -Lu --overwrite
  echo "CRLFファイルをLFに変換しました。"
fi

echo '処理を終了します。'

参考文献

https://infltech.com/articles/NWnUKJ
https://qiita.com/ionis_h/items/9f9642e435e30a33a88c
https://eng-entrance.com/linux-command-find