Windowsで作ったファイルリストをlinuxシェルのコマンドで1行ずつ読ませて処理する時に改行でハマる
これからもまた忘れてハマりそうなのでメモ。
例として、linuxサーバーで運用してるサイトにゴミファイルがあって、それをファイルにリストアップしてシェルコマンドで1行ずつ読ませて削除する場合を想定する。
リストファイルは、delete_list.txtの名前で作成し、内容は次のようなパス付のファイルリストになってる。
/siteroot/kome/sakana.html
/siteroot/niku/wine.html
...
削除のコマンドはまず次を実行。
cat delete_list.txt xargs rm -f
すると、こんなエラーが出現。
ls: cannot access '/siteroot/kome/sakana.html'$'\r': No such file or director
AIに理由聞くと、改行コードに'\r'入ってるからだよ、との事。
あぁ、WindowsのCRLF(\r\n)とlinuxのLF(\n)の改行の違いねぇ、、
という事で削除のコマンドを次のように変更して解決。
tr -d '\r' < delete_list.txt | xargs rm -f