ls:无法访问“文件名”:没有这样的文件或目录(但文件存在)

ls:无法访问“文件名”:没有这样的文件或目录(但文件存在)

HFS+ 格式的驱动器通过 SATA/USB 底座连接到 Ubuntu 盒子。

fsck.hfsplus 未报告分区问题。

尝试对受影响的文件运行“ls”(或其他任何内容)会导致“没有此类文件或目录”。在容器文件夹上运行“ls -lh”会引发相同的问题,但仍会在列表中显示该文件,但格式如下:

-rw-r--r-- 1 501 dialout   53M Mar  4 15:26 normal_file
-????????? ? ?   ?           ?            ? uncooperative_file

我不关心 501:dialout 其他文件的所有权(驱动器来自另一台机器)。

有一些文件受到此影响。它们似乎只是名称中带有 Unicode 和/或 Emoji 的文件。

我试过了:

  • “ls”带有“-b”和“-q”选项,但都没有透露任何内容
  • “ls -lh > ~/tmp.txt”并在“vi”中编辑以尝试检测名称中的无关字节
  • “chown root:根文件名”
  • “chmod 644 文件名”

该文件显示在“ls”的输出中,制表符补全也会填充它。但任何一种实际的交互失败。

有人可以提供一些指导吗?最终,我希望能够将这些文件 rsync/scp 到另一个盒子(不幸的是,它与驱动器支架不能很好地配合),并且我认为能够 ls/mv 将是一个很好的起点。

编辑:使用 bash。制表符补全会填充完整的文件名,但带有一些“???”代替某些字符(目前不确定原始字符)。源框中的区域设置:

LANG=en_CA.UTF-8
LANGUAGE=en_CA:en
LC_CTYPE="en_CA.UTF-8"
LC_NUMERIC="en_CA.UTF-8"
LC_TIME="en_CA.UTF-8"
LC_COLLATE="en_CA.UTF-8"
LC_MONETARY="en_CA.UTF-8"
LC_MESSAGES="en_CA.UTF-8"
LC_PAPER="en_CA.UTF-8"
LC_NAME="en_CA.UTF-8"
LC_ADDRESS="en_CA.UTF-8"
LC_TELEPHONE="en_CA.UTF-8"
LC_MEASUREMENT="en_CA.UTF-8"
LC_IDENTIFICATION="en_CA.UTF-8"
LC_ALL=

答案1

macOS 可以在 HFSplus 上对文件名进行 UTF16 编码,这意味着您不走运,因为 Linux 没有 UTF16 语言环境。基本上,您的区域设置是 UTF8 并且它不显示特定字符​​,这些字符很可能是 UTF16 字符。

我为你感到难过。

答案2

由于您可以在 bash 中使用制表符完成名称,因此请尝试重命名该文件,排除新文件名中的任何非 ASCII 字符。例如:

mv uncoop???erative_file cooperative_file

如果可能的话,我建议在源计算机上执行此操作,而不是在 MacOS 中的已安装文件夹上执行此操作,以避免由于计算机之间的字符转换而导致的任何潜在陷阱。一旦你有了 MacOS 和你的 ls 可以识别的文件名,你也应该能够 rsync 它。

我实际上进行了这个精确的实验,并且能够在 Raspian 盒子上执行 mv uncoop???erative_file Cooperative_file,然后与 Cooperative_file 进行交互,因为它通过 NFS 共享到我的 Mac,包括从 iterm2 窗口 rsync 该文件麦克。

相关内容