xargs를 자주 쓰는 편인데 한동안 잘 썼던 스크립트를 어쩌다 검산할 일이 생겼다.
정제해서 뽑아뒀던 파일 목록이 실제로 잘 있는지 [ -e "$FN" ]으로 검사해봤는데 분명 눈으로는 있는 파일이 스크립트에는 없다고 잡힌다.
맥과 리눅스 환경 차이 때문에 생기는 인코딩 문제일까 해서 convmv도 돌려봤지만 이상 없고.
그래서 직접 탭 눌러가며 파일 경로를 자동완성 해보니 그제야 문제가 보였다. 스페이스가 두 개 들어간 파일명이었다.
정제 단계에서 xargs를 거치는 부분이 있는데 이게 공백 여럿을 공백 하나로 바꿔버린 거였다. xargs에 -0 옵션을 주라거나 find 자체에서부터 -print0 옵션을 쓰라거나 하는 얘기들이 있는데 이건 좀 번거로워 보였다.
xargs echo xyz 처럼 STDIN을 xargs 통해서 뭉치던 걸 xargs echo -n | cat - <(echo " $f")
처럼 뭉치는 걸로 바꿨더니 증상이 해결되었다. echo 자체가 STDIN을 받아주면 좋을 텐데 그런 건 없는 모양.