长文件名在 Linux 上有没有解?

2020-01-15 12:33:04 +08:00
 lvsemi1

windows 和 osx 文件名长度限制都有 255 个字符,windows 还能额外扩展。但 linux 上的文件系统,无论是常见的 ext4、btrfs 还是 xfs、zfs,一律都是 255 字节,很多原本文件名百来个汉字的文件不重命名下根本搬不过去

8638 次点击
所在节点    程序员
19 条回复
codehz
2020-01-15 12:37:05 +08:00
无解,用数据库吧
gxustudent
2020-01-15 12:48:07 +08:00
脑子一根筋么?文件名换成文件夹名,再多重嵌套是否可以?
learningman
2020-01-15 12:54:25 +08:00
sha256 一下,建个表对应
MeteorCat
2020-01-15 13:00:33 +08:00
ln -s /xxx/yyy/zzz/........./ /tmp_dir
jasonyang9
2020-01-15 13:04:24 +08:00
好奇这百来个汉字都是些啥
MeteorCat
2020-01-15 13:05:06 +08:00
如果文件名超过 255 字节要修改内核,如果是仅仅文件夹长度 255 字节直接做个软连接当作文件夹入口
imn1
2020-01-15 13:08:18 +08:00
@jasonyang9 #5
估计是日语汉字
iamwho
2020-01-15 13:16:02 +08:00
这就要想一想了,为什么书写的时候,使用毕加索( Pablo Picasso ),而不是巴布罗·迭戈·何塞·弗朗西斯科·狄·保拉·胡安·纳波穆西诺·玛莉亚·狄·洛斯·雷梅迪奥斯·西普里亚诺·狄·拉·圣地西玛·特里尼达·路易斯·毕加索( Pablo Diego José Francisco de Paula Juan Nepomuceno María de los Remedios Cipriano de la Santísima Trinidad Ruiz Picasso )。
love
2020-01-15 14:07:19 +08:00
建个对应的文本文件放文件名?
比如 “101 - 截断的文件名...” + 对应的 101.txt
lihongjie0209
2020-01-15 14:13:05 +08:00
hash 一下吧, 定长输出
lvsemi1
2020-01-15 14:40:33 +08:00
谢谢大家的建议,看来确实无解,捣鼓文件名的映射虽然简单,但也意味着为了解决一个问题引入新问题,不仅要维护还得增加别人的培训成本,还是直接 ntfs 算了

@iamwho
对于普通用户来说,文件名就是最直观的文件标签

毕加索是个家喻户晓的名人,书面环境同时也会或多或少交待这个名字的生平,当然可以简便

但是如果一位平凡的玛丽苏女士希望别人更好的了解她的家世,显然用 “璃莹殇·安洁莉娜·樱雪羽晗灵·血丽魑·魅·安塔利亚·伤梦薰魅·海瑟薇·蔷薇玫瑰泪·羽灵·邪儿·凡多姆海威恩·夏影·琉璃舞·雅·蕾玥瑷雅·曦梦月·玥蓝·岚樱·紫蝶·丽馨·蕾琦洛·凤·颜鸢·希洛·玖兮·雨烟·叶洛莉兰·凝羽冰·玛丽·苏” 这个名字会更好
crc8
2020-01-15 15:52:25 +08:00
@jasonyang9 文件名即内容。
lvsemi1
2020-01-15 16:43:34 +08:00
又测试了下改内核里文件系统的 limits 重新编译,ls、mv 之类简单的命令似乎能用,但是 cat 之类的直接报找不到文件,不继续折腾了
ps1aniuge
2020-01-15 17:47:17 +08:00
@lvsemi1
win7,win2008r2 有长文件名问题。win10,win2016 没有。
具体来说,是从 win10 一周年( win10-14393 )增加的新特性。

------------------------ [win10 新增功能,对比 win7] ------------------------
win7,win2008r2,已经 eol 了。你到底要不要用 win10 ?
win10 到底比 win7 增加了什么功能?
整理如下,分享给有需要的人:


win10-10240 的好处:(新增功能)
1 从网上自动更新的锁屏壁纸,win7 没有。备注:按 win+L 锁屏。
壁纸存储目录
C:\Users\用户名\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets
2 敲命令不? cmd 和 powershell 支持 [用 alt+enter] 全屏,ctrl+c 和 ctrl+v。powershell 命令比 win7 多 1500 多个。
3 win10 支持 http2.0,传输数据更快,上网更快。win7 不行。
4 win10 支持 usb3.0。win7 还要装驱动。win10 只要有网卡驱动,其他驱动自动更新好!
5 貌似 win10 上运行.net 程序比 win7 更顺畅了,首次运行不慢。
6 笔记本外接显示器用户注意:win+p 好使,比 win7 略佳。


win10-14393 红石的好处:(一周年版比 win10 旧版新增功能)
1 红石引入了名叫 Windows Subsystem for Linux(WSL)的功能。
WSL 实现了 Linux 系统调用的子集,允许 Windows 用户使用 Bash 不用修改直接运行原生 Linux 程序。
2 win10 有目录+文件名长度 260 字符限制,红石没有了。
3 红石的 hyper-v 原生支持 docker。win10-10586 不行。详见:
https://www.sysgeek.cn/preview-hyper-v-containers-windows-10-build-14352/

4 TCP 协议支持 TCP Fast Open (TFO),
5 驱动程序强制签名,更安全!
omph
2020-01-15 21:44:09 +08:00
先用 7z 压缩一下试试
FrankHB
2020-01-15 22:00:48 +08:00
@lvsemi1 对普通人来讲,文件名就是文件名,只是访问文件的入口的一种。
文件名作为路径的组成部分,历史上起到的主要作用是唯一键(算上链接,在文件系统里也不唯一了,只是目录下唯一),而不是索引。键的名字上还可能有各种乱七八糟的约束……根本不适合当一般意义的标签。
文件名的本质其实就是一种元数据,只不过具有历史显著性而不方便随便扔掉——为了兼容构成路径这种 VFS 遗留 API 要求的输入才一概保留的( shell 这样的 CLI 在这个意义上也是 API ),因此很多时候相当鸡肋(特别不能指望兼容性)。而在现代文件系统内部作为键的作用,也已经被 inode 里的特定具体文件系统设计的元数据取代了。
普通用户基本不会有这些概念。作为开发者,你需要引导他们绕过坑,而不是推进坑里。不保险就跑。

至于能多坑的例子么……比如:
https://www.mercurial-scm.org/wiki/EncodingStrategy#The_.22makefile_problem.22
我就不多说脏话了(这里还好就是专坑开发者)。
712e1959
2020-01-15 22:16:15 +08:00
insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html

你确定长文件名导致的长路径名在 NTFS 上就有解了?
loading
2020-01-16 07:50:12 +08:00
我感觉配合一个映射 txt,然后自己修改一些文件浏览器还原文件名,这个实现起来要简单很多,如果是 web 实现就更容易了。
lvsemi1
2020-01-16 10:14:13 +08:00
… 上面几位在对空气输出?这本来就是 windows/osx 上的文件!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/638079

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX