使用cat | xargs mkdir报错文件名过长,含\r字符如何解决?
问题原因与解决方法
为什么会出现\r字符?
你的folders.txt采用的是Windows风格的换行符(CRLF,即\r\n),而macOS默认使用Unix风格的换行符(LF,即\n)。当cat读取文件时,\r(回车符)没有被识别为换行分隔符,反而被当作文件名的一部分传递给xargs,导致所有行的内容被拼接成一个超长的文件名,最终触发"File name too long"错误。
解决方法
方法1:转换文件换行符为Unix风格
使用dos2unix工具转换文件(若未安装,可通过brew install dos2unix安装):
dos2unix folders.txt
转换完成后,执行原命令即可:
cat folders.txt | xargs mkdir
方法2:在命令中直接过滤\r字符
用tr命令删除文件中的\r字符,再传递给xargs:
cat folders.txt | tr -d '\r' | xargs mkdir
方法3:指定xargs的分隔符
告诉xargs以换行符作为分隔符,自动忽略\r:
xargs -d '\n' mkdir < folders.txt
方法4:用while循环处理(通用且稳妥)
这种方式能兼容不同换行符,还支持带空格的文件名:
while IFS= read -r line; do mkdir "$line" done < folders.txt
内容的提问来源于stack exchange,提问作者DasKraut
相关产品推荐
相关产品推荐

