Ubuntu下批量修复含无效点号的文件名以完成跨NTFS/exFAT硬盘的文件复制
Ubuntu下批量修复含无效点号的文件名以完成跨NTFS/exFAT硬盘的文件复制
我太懂你这种烦恼了——复制旧归档文件到外接NTFS/exFAT硬盘时,那些带奇怪点号的文件和文件夹总跳出来报“invalid file name”,一个个改根本忙不过来。下面给你一套批量处理的方案,一次性搞定两种问题(文件名末尾带点、文件名里有双点),之后就能顺利复制了。
第一步:先处理末尾带点的文件和文件夹
NTFS/exFAT不允许文件名或文件夹名以点结尾,我们先把这些多余的点去掉:
- 修复末尾带点的文件:
find /你的源文件夹路径 -type f -name "*." -exec sh -c 'mv "$0" "${0%."}"' {} \;
解释:find遍历源文件夹下所有以点结尾的文件,${0%."}"是Shell参数替换,去掉文件名末尾的最后一个点。
- 修复末尾带点的文件夹:
find /你的源文件夹路径 -type d -name "*." -exec sh -c 'mv "$0" "${0%."}"' {} \;
建议先处理文件夹再处理文件,避免路径嵌套导致的识别问题。
第二步:修复文件名中的双点(比如file..txt这类)
有些文件会出现扩展名前有双点的情况,同样会被NTFS/exFAT判定为无效,我们把连续的双点替换成单点:
- 修复文件中的双点:
find /你的源文件夹路径 -type f -name "*.." -exec sh -c 'mv "$0" "$(echo "$0" | sed 's/\.\././g')"' {} \;
这里用sed把文件名里所有连续的双点替换成单点,确保文件名格式合规。
- 修复文件夹中的双点:
find /你的源文件夹路径 -type d -name "*.." -exec sh -c 'mv "$0" "$(echo "$0" | sed 's/\.\././g')"' {} \;
依然优先处理文件夹,避免后续文件路径出错。
第三步:合规后完成文件复制
处理完所有无效文件名后,就可以放心复制了。推荐用rsync,它比cp更可靠,支持断点续传,还能同步权限信息:
rsync -av /你的源文件夹路径/ /你的目标硬盘路径/
如果只是简单复制,用cp -r也可以,但rsync在处理大文件和中断后恢复时更省心。
小提示
- 操作前建议先在一小部分测试文件上试一遍命令,确保没有问题再批量处理整个归档;
- 如果文件名里还有其他特殊字符导致复制失败,可以考虑用
rsync的--iconv=utf-8,utf-16参数处理字符编码问题,不过你的情况主要是点号问题,大概率用不上。
备注:内容来源于stack exchange,提问作者Cor Nouws
相关产品推荐
相关产品推荐

