You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cygwin执行mv命令报错:无法找到含$'\r'的文件,如何解决?

解决Cygwin中移动文件时的cannot stat换行符错误

这个问题我之前帮不少人排查过——本质是Windows和Unix换行格式不兼容搞的鬼!

你看到的'filename.pdf'$'\r'里的$'\r'就是Windows格式文件的回车符(CR)。你的list.txt是用Windows编辑器保存的,每行结尾是\r\n(CRLF),但Cygwin是类Unix环境,只会把\n当作换行,\r会被当成文件名的一部分,系统自然找不到带这个特殊字符的文件,所以报错了。

下面是具体的解决步骤:

1. 先修复list.txt的换行格式

方法一:用dos2unix工具(推荐)

如果你的Cygwin里还没装dos2unix,先安装:

apt-cyg install dos2unix

然后转换文件格式:

dos2unix list.txt

这个命令会直接把Windows的CRLF换行改成Unix的LF换行。

方法二:用sed手动去除回车符

不想装工具的话,用sed命令也能快速去掉每行末尾的\r:

sed -i 's/\r$//' list.txt

2. 执行移动命令

格式修复后,再运行你原来的移动命令就正常了:

for file in $(cat list.txt); do mv "$file" destination; done

(进阶)更健壮的写法

如果你的文件名里包含空格,上面的for循环可能会出问题。推荐用while read循环来处理,同时一步完成格式转换和移动:

sed 's/\r$//' list.txt | while read -r file; do mv "$file" destination; done

这个写法先把每行的\r过滤掉,再逐行读取文件名执行移动,能兼容带空格的文件名,稳定性更强。

内容的提问来源于stack exchange,提问作者Christian Virtue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:40:07