外置驱动器,无法清空垃圾箱,rm看到一个文件,但是ls -la没有


9

我正在清除外部驱动器中的音乐文件夹,发现无论如何尝试都无法删除的目录。

如果我通过GUI将其放入垃圾桶

由于正在使用“文件夹”项目,因此无法完成该操作。

如果我rm -rf通过终端将其删除

$ rm -rf folder/
rm: folder/: Directory not empty

如果我ls -la用来检查其内容

$ ls -la
total 512
drwxrwxrwx  1 user  staff  131072 Jan  3  2017 .
drwxrwxrwx  1 user  staff  131072 Jan  3  2017 ..

如果我rm -i *在文件夹中使用

$ rm -i *
rm: 03 - Ēlusion.mp3: No such file or directory

如果我sudo lsof +D folder/用来检查是否打开了任何文件

程序退出没有任何回报。

如果我使用磁盘工具修复(急救)磁盘和卷

通过了健康检查,因此未开始维修。

如果我重新启动macOS

问题仍然存在。

附加信息:

  • 我可以将文件夹移动到驱动器中,但不能移动到另一个驱动器。

  • 我可以重命名文件夹。

  • ls -i *.mp3返回ls: 03 - Ēlusion.mp3: No such file or directory,与相同rm -i *.mp3

  • 该文件未显示在Finder中,这是令人困惑的部分,无论Terminal可能遇到的文件名显示问题(我始终将其设置为use Unicode - UTF-8),我认为都在发挥作用。

在回答问题时,不,ls -ib不返回任何内容。

$ ls -i
$ ls -ib
$ ls -laib
total 512
2762318 drwxrwxrwx  1 user  staff  131072 Jan  3  2017 .
2685260 drwxrwxrwx  1 user  staff  131072 Jan  3  2017 ..

所以很显然其中有东西,但是ls -la看不到它,而rm -i文件名却很奇怪?

get info 通过GUI上下文菜单确实确认了文件夹中有1个项目,但是字节为零,并且肯定不会出现在finder中。

我现在不确定该怎么办。帮助非常感谢!

(在外部驱动器上使用10.13.4 + ExFAT)


1
您是否考虑过备份所需的所有内容-可能已经备份了...然后完全重新格式化该驱动器以重新开始?
太阳迈克

是否ls -b显示文件?如果是这样,您可以ls -bi获取索引节点并按照以下答案进行操作,或者仅将文件名复制到-b输出中。
Reid

我相信核心问题不在于文件名,ls -bi *.mp3其结果与OP中显示的相同。
bitinn

Answers:


10

该问题似乎是由位于名为folder的目录中的名为03-Ēlusion.mp3的文件引起的。

由于Terminal.app无法在文件名中呈现变音符号-确实如此,但这超出了为您提供最简单解决方案的范围-它通过隐藏文件名来隐藏其失败(这在我之前是闻所未闻的) ;可能是High Sierra对/.file、/.volfs和64位inode的更改了?等一下-没关系;您对问题的编辑告诉我我误解了您。 Finder认为它不存在。显然,确实如此。更改方法如下:

首先,确定文件的索引节点号。在Terminal.app中,cd转到目录“文件夹”,然后发出以下命令:ls -i *.mp3

复制响应左侧列中提供的inode的数字字符串,这类似于

12345678 03 - E ̄lusion.mp3

-并将其放入此命令,这会将其重命名为终端可以正确呈现的内容:

find . -inum 12345678 -exec mv {} deletemenow \;

-为您提供文件夹“文件夹”中的文件“ deletemenow”,您可以按照最适合自己的方式处置这两种文件。


哇,那是一个令人震惊的错误。
chrylis-罢工-18年

2
我认为这是不正确的。终端可能会隐藏无法渲染的单个字符,但不会删除整个文本行。
duskwuff -inactive-

1
@duskwuff无论哪种方式,似乎文件名都会引起问题,因此无论如何,这都是一个潜在的解决方案。
JAB

抱歉,问题似乎比这还复杂:我尝试过$ ls -i *.mp3,返回ls: 03 - Ēlusion.mp3: No such file or directory
bitinn

1
您可以只ls -i在目录中运行以防止Shell通配符扩展受到干扰吗?
nohillside

9

我花了很长时间才得出此总结,但我认为这是确定的答案。

我的问题的原因是一个众所周知的原因:

OS X很奇怪,因为它可以规范化文件名,并且可以使用NFD而不是更常见的NFC

从历史上看(不是那个旧的10.11之前的时代),OS X + HFS +对所有文件名强制使用NFD格式,并且您只能从命令和系统调用中获得NFD结果。

然后情况开始发生变化,在10.11中,一些系统调用结果被标准化为NFC,使其与Windows和Linux内联,但以破坏某些期望在OS X上使用NFD的程序为代价。

但是自从引入macOS 10.13 + AFPS以来,这种行为再次发生了变化:Apple决定在显示和系统调用中将其标准化为NFD,但保留原始文件名(因此NFC和NFD均受支持,但是如果您选择Finder中的文件名或lsTerminal中的复制结果,您将获得NFD表单)。

一切都很好,直到您使用exFAT将具有NFD文件名的文件放入外部驱动器(因为它是唯一支持4GB +文件大小的跨macOS / Windows格式):macOS 10.13某种程度上认为您的文件必须为NFC格式,所以它窃听器。

实际上,这是一个快速测试,我在Windows的exFAT驱动器上有一个包含3个文件的文件夹:

在此处输入图片说明

  • test.mp3
  • Ēlusion.mp3Ē在NFC中)
  • 03 - ĒlusionĒ在NFD中)

(您可以在此处复制确切的unicode

当我将它们安装在我的macOS上时,这就是我看到的内容:

在此处输入图片说明

ls -laib结果是:

$ ls -laib
total 46592
2762318 drwxrwxrwx  1 user  staff    131072 Jan  3  2017 .
2685260 drwxrwxrwx  1 user  staff    131072 Jan  3  2017 ..
1572961 -rwxrwxrwx  1 user  staff  11672464 Aug 23  2014 Ēlusion.mp3
1572871 -rwxrwxrwx  1 user  staff  11672464 Aug 23  2014 test.mp3

如您所见,NFC文件存在,但NFD文件丢失。

即使您知道OS X上NFC / NFD问题,也可能不会期望exFAT外部驱动器以相反的方式面对此问题(NFC很好,但是NFD着急了)。

但是首先导致我的音乐文件使用NFD文件名的原因是:

  • 我最初使用旧版Mac在10.9 / 10.10上下载了此音乐文件,该文件强制执行NFD文件名。
  • 在某些时候,我将它们移至Windows + NTFS驱动器,该驱动器不执行NFC / NFD,因此保留了原始NFD文件名。
  • 现在,我想使用exFAT驱动器将此文件移回到我的macOS 10.13 + APFS中(exFAT支持与NTFS相同的UTF-16约定)。
  • 地狱挣脱。

我可以通过网络驱动器或TeamViewer复制文件,这很好,但是exFAT在macOS上触发了该错误。

经验教训:

  • Unicode文件名仍然是一个威胁。
  • 您实际上需要Windows / Linux来解决此问题(如果情况是您的文件位于exFAT外部驱动器上)。

@bitlinn:在我的评论中单击指向duskwulff的第二个链接,并尝试在那里可以找到的Apfelstrudel unicode标准化工具。对于APFS非常有用,与exFAT无关。还是...?
Doc G.

1
@DocG。这个问题比我最初想象的要复杂一些,但是我再次更新了答案!
bitinn

是的,我认为您可能最终会这样做。有关Error 36在非HFS系统上分离文件属性的更多信息,请参阅我先前的评论,并进行网络搜索,例如“来回移动文件mac mac error 36”。自系统10.6到来以来,这是另一个(另一个)已知的MacOS / OS X文件命名问题。在Unicode规范化和dot_underscore属性分离之间,您遇到了双重错误的麻烦。我怀疑dot_clean命令是否有机会。
Doc G.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.