Linux 文件名看起来相同,但复制后不同
我的文件名看起来一样,但实际上不同 我将Linux 文件名看起来相同,但复制后不同,linux,encoding,terminal,console,filenames,Linux,Encoding,Terminal,Console,Filenames,我的文件名看起来一样,但实际上不同 我将many\u img/从Debian1复制到OS X,然后从OS X复制到Debian2(出于维护目的),并在每个步骤上使用rsync-a-e ssh,以保留所有内容 如果我做了ls many\u img/img1/*我在Debian1和Debian2上获得了相同的视觉输出: prévisionnel.jpg 但不知何故,ls many_img/img1/*| od-c给出了不同的结果: 关于Debian1: 0000000 p r 303 25
many\u img/
从Debian1复制到OS X,然后从OS X复制到Debian2(出于维护目的),并在每个步骤上使用rsync-a-e ssh
,以保留所有内容
如果我做了ls many\u img/img1/*
我在Debian1和Debian2上获得了相同的视觉输出:
prévisionnel.jpg
但不知何故,ls many_img/img1/*| od-c
给出了不同的结果:
关于Debian1:
0000000 p r 303 251 v i s i o n n e l . j p
0000020 g \n
关于Debian2:
0000000 p r e 314 201 v i s i o n n e l . j
0000020 p g \n
因此,我在Debian2上的web应用程序无法将文件系统中的图片与数据库中的文件名匹配
我想可能需要更改文件编码,但看起来每个操作系统上都已经有utf-8了:
convmv --notest -f iso-8859-15 -t utf8 many_img/img1/*
返回:
Skipping, already UTF-8
是否有一个命令可以从我的Debian 2中取回我所有的4万个文件名,比如我的Debian 1上的文件名(不需要再次传输)?
我不知道这是文件名编码问题还是其他问题?第一个文件名包含单个字符,而第二个文件名包含一个简单的
e
,后跟组合字符。它们都是有效的Unicode,只是不同而已。操作系统似乎在创建文件时规范化了文件名。我终于找到了我要找的命令行转换工具(感谢@Mark将我设置在正确的轨道上!)
好吧,我不知道OSX是用不同的UTF-8标准化在后台对文件名进行编码的
- OSX似乎正在使用Unicode规范化表单D(NFD)
- Linux操作系统使用Unicode规范化表单C(NFC)
é
(拉丁文小写字母e带有尖锐的重音),在Linux上从技术上讲是一个(U+00E9)
字符
并且在OSX上被分解为基本字母“e”(U+0065)和分解形式(NFD)的锐重音(U+0301)
现在介绍转换工具:
--iconv
选项仅适用于rsync V3,而OS X默认提供旧的2.6.9版本,因此您需要先对其进行更新
通常要检查和升级:
rsync --version
brew install rsync
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.profile
谢谢@Mark,竖起大拇指,你说得100%对,这帮助我集中精力,看得更远。在谷歌搜索了几个小时后,我终于找到了相应转换文件名所需的命令行工具。