gpt4 book ai didi

linux - 文件名看起来一样,但复制后不同

转载 作者:太空狗 更新时间:2023-10-29 11:29:18 25 4
gpt4 key购买 nike

我的文件名看起来一样,但实际上不是。

我将 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 上的网络应用无法将文件系统中的图片与数据库中的文件名匹配。

我想也许我需要更改文件编码,但看起来它在每个操作系统上都已经是 utf-8:

convmv --notest -f iso-8859-15 -t utf8 many_img/img1/* 

返回:

Skipping, already UTF-8

是否有命令可以从我的 Debian 2 中取回我的所有 4 万个文件名,例如我的 Debian 1 上的文件名(无需再次传输所有文件名)?我很困惑这是文件名编码问题还是其他问题?

最佳答案

我终于找到了我一直在寻找的命令行转换工具(感谢@Mark 让我走上正轨!)

好吧,我不知道 OS X 在后台使用不同的 UTF-8 规范化对文件名进行编码。

  • 看来 OS X 使用的是 Unicode Normalization Form D (NFD)
  • 当 Linux 操作系统使用 Unicode Normalization Form C (NFC) 时

HSF+ 文件系统以 UTF-16 编码每个文件名字符。Unicode 字符在 OS X 上是分解的,而在 Linux 操作系统上是预组合的。

é 例如(带重音符号的拉丁文小写字母 e),技术上是 Linux 上的 (U+00E9) 字符并在 OS X 上以其分解形式 (NFD) 分解为基本字母“e”(U+0065) 和重音符 (U+0301)

现在关于转换工具:

  1. 从 Linux 操作系统执行的此命令将从 NFD 转换文件名到 NFC:

    convmv --notest --nfc -f utf8 -t utf8/path/to/my/file

  2. 从 OS X 执行的这个命令将使用 NFD 通过 ssh rsync 到 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

关于linux - 文件名看起来一样,但复制后不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26516700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com