Yor*_*ric 2 linux terminal console filenames encoding
我的文件名看起来一样,但它们不是.
我many_img/从Debian1 复制到OS X,然后从OS X 复制到Debian2(用于维护目的),并   rsync -a -e ssh在每个步骤中使用以保留所有内容.
如果我   ls many_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中取回我的Debian 1上的所有40,000个文件名(没有再次转移)?如果它是文件名编码问题或其他什么我很困惑?
我最终找到了我正在寻找的命令行转换工具(感谢@Mark让我走上正轨!)
好吧,我不知道OS X是用不同的UTF-8规范化编码文件名.
HSF +文件系统对UTF-16中的每个文件名字符进行编码.在OS X上分解Unicode字符与在Linux OS上预分解.
é例如(具有急性重音的拉丁文小写字母e),在技术上是(U+00E9)Linux上的一个字符,并且在OS X上被分解为基本字母"e" (U+0065)和(U+0301)其分解形式(NFD)的尖锐重音.
从Linux OS执行的此命令将文件名从NFD转换为NFC:
convmv --notest --nfc -f utf8 -t utf8/path/to/my/file
从OS X执行的此命令将通过ssh rsync与NFD到NDC进行直接转换:
rsync -a --iconv = utf-8-mac,utf-8 -e ssh path/to/my/local/directory/*user @ destinationip:/ remote/path /
我测试了这两种方法,它就像一个魅力.
注意:
--iconv 选项仅适用于rsync V3,而OS X默认提供旧的2.6.9版本,因此您需要先更新它.
通常要检查和升级:
rsync --version
brew install rsync
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.profile