とあるファイルをVimで修正して保存したら、元のファイルに改行コード(\n
)がなくて
Git等で余計な差分が出て困る場合の対処方法
事前にファイル末尾に\n
がないやつを探し出して、一括修正する。
例えばカレント配下の*.jspなら
find . -type f -name '*.jsp' -exec sh -c "tail -1 {} | xxd -p | tail -1 | grep -q -v 0a$"';' -exec sh -c "echo >> {}"';'
やっていること
find -exec
で見つかったファイルに対して処理。ここではsh -c
でダブルクォート内部をシェル実行。’;’
は-exec
の終端子。tail -1
で最終行のみ出力xxd -p
で素のhex dumpgrep -q -v 0a$
でサイレントモードで末尾に0a
(=\n
)が無い物を探す。- 見つかった末尾改行がないファイルに対して
echo >>
して改行を追記。-exec
は連鎖の絞り込みが効く模様。
もっとエレガントな方法はないものか・・・