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

関連するタグ

Linux, Windows, シェル, 改行コード