you-get icon indicating copy to clipboard operation
you-get copied to clipboard

Solve filename is too short under Linux systems

Open wjcskqygj2015 opened this issue 4 years ago • 2 comments

似乎是为了某些平台上的文件名字符串长度的限制,所以默认压缩到80个Unicode长度的字符串,但对于某些过于从网站上下载的视频,由于有过多的前缀就会导致真正用于区分的文件名字的信息在非常的后面,这个时候截断就不太合理了。

目前知道的是在Linux系统上,并不存在这个长度的限制,所以将文件名trim这个过程先移动到非*nux系统上了。

wjcskqygj2015 avatar Apr 11 '20 06:04 wjcskqygj2015

Hello @wjcskqygj2015, Thanks for the Pull Request. We :heart: our contributors! Please wait for one of our human maintainers to review your patches. This may take a few days to weeks. Also, please understand that although your Pull Request may or may not be eventually merged, we value all contributions equally.

祝您健康!

soimort-bot avatar Apr 11 '20 06:04 soimort-bot

路过评论。

Linux 也有限制啊, 文件名最多 255 bytes (3 bytes 的中文字则是 255/3 = 85 字, 更新: 4 bytes 𪍑 则是 = 63 字, 因此 python 3 下盲目 slice [:80] 是错的因为 80 x 4 bytes = 320 bytes 超过系统 255 bytes)。不过据说加密建议 ~140 bytes 限制。不确定此方法能否返回正确的 eCryptfs 限制。更新: Docker 是 242 bytes, Windows 10(xp 应该低, 199) 需要 \\?\ + abspath 才能享有单个 component 255 bytes。

路径则另外算, 据说是 4096, 不过我在 /tmp mkdir/cd 两个 85 中文字的目录后, /bin/bash 就崩溃了。[更新]其实完整路径最多 4095 bytes 不需要理会 (不可能完全自动化,如果用户在第 4095 byte 运行 you-get 呢?仍然得错误) ,只需要确保每一个单独路径符合单个文件的 255, 242, 199, 143... bytes 即可。

我来说说 youtube-dl 提供的 --restrict-filenames 选项限制,能移除空格, 不过我觉得效果很差,因为它盲目移除所有中文/泰文, 很容易导致相关语言的视频标题没有任何意义。理应优先选择(或平均选择) unicode 文字而不是 ascii, 也理应使用最大化而不是白白浪费限制(例如,移除后变成 42 bytes, 浪费了 213 bytes 能填补)。也无法自选左/中/右, 或能智能过滤无意义的链接。理应提供一个选项,表示一旦侦测超过限制就交互式询问/调节(包括: 输入想要的 regex) 想要的标题部分。抑或利用路径 4096 的优势,把多余的文件名变成多个父目录。抑或截断记录在 log (更新: youtube-dl 有 --write-description (没标题, 没日期), 不过不是集中同一个文件所以太多文件有点乱 (同一个文件也不容易, 因为 description 太长)。 而且不是默认选项,压根没提醒用户储存 log)。以上是 youtube-dl 的缺陷, you-get 可以做个参考。

limkokhole avatar May 28 '20 10:05 limkokhole