文件名过长导致的同步错误

admin 2025年4月25日00:03:07评论1 views字数 1097阅读3分39秒阅读模式
在使用 rsync 同步时,命令中提示:“file has vanished”
文件名过长导致的同步错误
出现 “file has vanished” 一般是在 rsync 同步过程中源文件发生变动,比如文件改名、删除导致找不到源文件,从而出现同步出错。
在文件系统中查找文件发现文件是存在的,但文件名超过了 255 个字符。当文件名长度超过 255 个字符长度限制后,在 rsync 、 ls、find 命令中将会对文件名截短。截短后会出现文件名不全的情况,从而无法定位文件。
使用 ls 加通配符会报错,通过 find 命令可以找到文件,但文件名是截短后的,与 rsync 报错一致。
文件名过长导致的同步错误
通过定义 printf 参数可以将文件的 inode 打印出来。
bash$ find . -iname "我们为什么要睡觉*" -printf '%it%pn'281474976745218 ./我们为什么要睡觉(让比尔•盖茨决定放下工作,好好睡觉!《纽约时报》畅销书排行榜NO.1,全球公认殿堂级睡眠百科全书,全景解析睡梦秘境,轻松摆脱睡眠问题!后浪出品) ([英] 马修·沃
通过 inode 可以定位文件,虽然 rsync 、ls、mv、cp 等由C编译的命令无法处理长文件名,但使用 python 是可以定位文件的。写了一个通过 inode 定位文件的 python 脚本,将完整的文件名打印了出来:
文件名过长导致的同步错误
文件名长度超过了 255 ,ls 、cp 命令无法处理。也就是无法通过命令对文件进行重命令。于是思考能否用 python 实现对文件名进行截短(重命名)。
文件名过长导致的同步错误
最终在AI的帮助下用 python 实现了一个自动改名程序。执行过程为:递归查找目录中的长文件名,如果出现文件名超过255字符就进行截短重命名。
把文件名异常的文件拷贝到测试目录进行测试,使用程序自动改名前目录内容为:
文件名过长导致的同步错误
文件名过长导致的同步错误
使用 python 程序自动改名后目录内容为:
python truncate_name.py "新建文件夹"
文件名过长导致的同步错误
文件名过长导致的同步错误
python 程序在处理文件名时不会因为文件名过长而报错,C代码编译的 rsync、ls、cp 命令在处理长文件名时可能会报错。
自动将长文件名改短的 python 代码放到 github 上了:
https://github.com/hyang0/my_tools_wbai
文件名过长导致的同步错误
对整个需要同步的目录进行长文件名截短后,再次同步不再报错:
文件名过长导致的同步错误
同时文件改名前和改名后的日志都做了保存,后续需要查看完整文件名也也可在改名日志中查看。
文件名过长导致的同步错误
使用 AI 辅助解决问题后的感想:
DeepSeek 出来后,程序员的角色定位应该为 Planner 和 Debugger,而不是 Coder。当 AI 写的代码运行不符合预期时,程序员应该帮助 AI 对代码进行调试。
全文完。

原文始发于微信公众号(生有可恋):文件名过长导致的同步错误

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月25日00:03:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   文件名过长导致的同步错误https://cn-sec.com/archives/3962000.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息