Externes Laufwerk, kann den Papierkorb nicht leeren, rm sieht eine Datei, aber ls -la nicht

9

Ich habe einen Musikordner in meinem externen Laufwerk gelöscht und ein Verzeichnis gefunden, das ich nicht löschen kann, egal was ich versuche.

Wenn ich es über die GUI in den Papierkorb lege

Der Vorgang kann nicht abgeschlossen werden, da das Element "Ordner" verwendet wird.

Wenn ich rm -rfes über das Terminal entferne

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

Wenn ich ls -laseinen Inhalt überprüfe

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

Wenn ich rm -i *innerhalb des Ordners verwende

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

Wenn ich verwende sudo lsof +D folder/, um zu überprüfen, ob Dateien geöffnet sind

Beim Beenden des Programms wird nichts zurückgegeben.

Wenn ich das Festplatten-Dienstprogramm verwende, um Festplatte und Volume zu reparieren (Erste Hilfe)

Der Gesundheitscheck wurde bestanden, sodass keine Reparatur eingeleitet wurde.

Wenn ich macOS neu starte

Das Problem besteht weiterhin.

Zusätzliche Information:

  • Ich kann den Ordner innerhalb des Laufwerks verschieben, jedoch nicht auf ein anderes Laufwerk.

  • Ich kann den Ordner umbenennen.

  • ls -i *.mp3gibt zurück ls: 03 - Ēlusion.mp3: No such file or directory, wie rm -i *.mp3.

  • Die Datei wird nicht im Finder angezeigt, das ist ein verwirrender Teil, egal welches Problem bei der Anzeige von Dateinamen im Terminal auftreten könnte (ich habe es immer so eingestellt, dass es verwendet wird Unicode - UTF-8), ich denke, es gibt mehr Kraft im Spiel.

Nein, als Antwort auf Fragen ls -ibgibt es nichts zurück.

$ 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 ..

Anscheinend ist etwas drin, ls -lakonnte es aber nicht sehen, während rm -ider Dateiname komisch ist?

get info Über das GUI-Kontextmenü wurde bestätigt, dass sich 1 Element im Ordner befindet, jedoch mit null Byte, und es wird sicherlich nicht im Finder angezeigt.

Ich bin mir nicht sicher, was ich zu diesem Zeitpunkt tun soll. Hilfe sehr geschätzt!

(Verwenden von 10.13.4 + ExFAT auf einem externen Laufwerk)

Bitinn
quelle
1
Haben Sie darüber nachgedacht, alle gewünschten Daten zu sichern - wahrscheinlich ohnehin schon gesichert ... und dann das Laufwerk komplett neu zu formatieren, um von vorne zu beginnen?
Solar Mike
Zeigt ls -bdie Datei an? In diesem ls -biFall können Sie den Inode abrufen und der folgenden Antwort folgen oder alternativ einfach den Dateinamen in die -bAusgabe kopieren .
Reid
Ich glaube, das Kernproblem liegt nicht beim Dateinamen. ls -bi *.mp3Zeigen Sie das gleiche Ergebnis wie in OP.
Bitinn

Antworten:

10

Das Problem scheint durch eine Datei mit dem Namen 03 - Ēlusion.mp3 verursacht zu werden, die sich im Verzeichnis mit dem Namen Ordner befindet .

Da Terminal.app keine diakritischen Zeichen in Dateinamen rendern kann - nun ja, aber das geht über den Rahmen der einfachsten Lösung für Sie hinaus -, verbirgt es seinen Fehler, indem es den Dateinamen ausblendet (etwas, das ich bisher nicht gekannt habe) ; vielleicht die Änderungen von High Sierra an /.file, /.volfs und 64-Bit-Inodes? Warten Sie - egal; Ihre Bearbeitung Ihrer Frage sagt mir, dass ich Sie missverstanden habe.) Wie auch immer, die Existenz der Datei ist bekannt, zusammen mit der Ironie Behauptung des Finders, dass es nicht existiert. Offensichtlich ist es so. So ändern Sie das:

Bestimmen Sie zunächst die Inode-Nummer der Datei. Wechseln Sie in Terminal.app cdin das Verzeichnis "Ordner" und geben Sie den folgenden Befehl ein:ls -i *.mp3

Kopieren Sie die Zahlenfolge des Inodes in der linken Spalte der Antwort

12345678 03 - E ̄lusion.mp3

--und fügen Sie es in diesen Befehl ein, wodurch es in etwas umbenannt wird, das das Terminal korrekt rendern kann:

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

- Geben Sie die Datei "deletemenow" im Ordner "folder", über die Sie auf die für Sie am besten geeignete Weise verfügen können.

Doc G.
quelle
Wow, das ist ein beeindruckend schrecklicher Fehler.
Chrylis -on Streik-
2
Ich denke nicht, dass das richtig ist. Das Terminal kann einzelne Zeichen ausblenden , die nicht gerendert werden können, entfernt jedoch nicht die gesamte Textzeile.
Abenddämmerung -inaktiv-
1
@duskwuff In beiden Fällen scheint der Dateiname Probleme zu verursachen, daher ist dies unabhängig davon eine mögliche Lösung.
JAB
Entschuldigung, aber das Problem scheint komplexer zu sein: Ich habe es versucht $ ls -i *.mp3, es kehrt zurück ls: 03 - Ēlusion.mp3: No such file or directory.
Bitinn
1
Können Sie einfach ls -iinnerhalb des Verzeichnisses ausgeführt werden, um zu verhindern, dass die Shell-Platzhaltererweiterung stört?
Nohillside
9

Ich habe lange gebraucht, um zu dieser Zusammenfassung zu kommen, aber ich denke, es ist die endgültige Antwort.

Die Ursache meines Problems ist eine bekannte :

OS X ist das ungerade, sowohl weil es Dateinamen normalisiert als auch weil es NFD anstelle des allgemeineren NFC verwendet .

In der Vergangenheit (nicht so alt, vor 10.11) erzwingt OS X + HFS + das NFD-Formular für alle Dateinamen , und Sie erhalten das NFD-Ergebnis nur aus Befehlen und Systemaufrufen.

Dann beginnen sich die Dinge zu ändern. In 10.11 werden einige Systemaufrufergebnisse auf NFC normalisiert , wodurch es mit Windows und Linux in Einklang gebracht wird, jedoch auf Kosten einiger Programme, die NFD unter OS X erwarten.

Seit der Einführung von macOS 10.13 + AFPS ändert sich das Verhalten jedoch erneut: Apple beschließt , bei Anzeige- und Systemaufrufen auf NFD zu normalisieren , die ursprünglichen Dateinamen jedoch unverändert zu lassen (daher werden sowohl NFC als auch NFD unterstützt, wenn Sie dies auswählen Wenn Sie den Dateinamen im Finder oder das Kopierergebnis lsim Terminal eingeben, erhalten Sie das NFD-Formular.

Dies ist alles großartig, bis Sie eine Datei mit NFD-Dateinamen mit exFAT in ein externes Laufwerk einfügen (da dies das einzige Cross-MacOS / Windows-Format mit Unterstützung für 4 GB + Dateigröße ist): MacOS 10.13 glaubt also, dass Ihre Datei im NFC-Format sein muss es ist abgehört.

In der Tat, hier ist ein kurzer Test, ich habe einen Ordner in Windows auf meinem exFAT-Laufwerk mit 3 Dateien:

Geben Sie hier die Bildbeschreibung ein

  • test.mp3
  • Ēlusion.mp3( Ēin NFC)
  • 03 - Ēlusion( Ēin NFD)

( Den genauen Unicode können Sie hier kopieren )

Wenn ich sie auf meinem MacOS einbinde, sehe ich Folgendes:

Geben Sie hier die Bildbeschreibung ein

und ls -laibErgebnis:

$ 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

Wie Sie sehen können, ist die NFC-Datei vorhanden, aber die NFD-Datei fehlt.

Selbst wenn Sie sich des NFC / NFD-Problems unter OS X bewusst sind , können Sie nicht erwarten, dass das externe exFAT-Laufwerk dieses Problem in umgekehrter Weise angeht (NFC ist in Ordnung, aber NFD ist in Flammen).

Aber was könnte dazu geführt haben, dass meine Musikdatei überhaupt den NFD-Dateinamen verwendet hat:

  • Ich habe diese Musikdatei ursprünglich am 10.9 / 10.10 mit einem älteren Mac heruntergeladen, wodurch der NFD-Dateiname erzwungen wird.
  • Irgendwann verschiebe ich sie auf ein Windows + NTFS-Laufwerk, das NFC / NFD nicht erzwingt, sodass der ursprüngliche NFD-Dateiname erhalten bleibt.
  • Jetzt möchte ich diese Datei mit einem exFAT-Laufwerk wieder auf mein macOS 10.13 + APFS verschieben (exFAT unterstützt dieselbe UTF-16-Konvention wie NTFS).
  • Die Hölle bricht los.

Ich hätte die Datei über ein Netzwerklaufwerk oder TeamViewer kopieren können, und es wäre in Ordnung, aber exFAT löst diesen Fehler unter macOS aus.

Lektionen:

  • Der Unicode-Dateiname ist immer noch eine Bedrohung.
  • Sie benötigen tatsächlich Windows / Linux, um dieses Problem zu beheben (wenn sich Ihre Datei auf einem externen exFAT-Laufwerk befindet).
Bitinn
quelle
@bitlinn: Klicken Sie auf den zweiten Link in meinem an duskwulff gerichteten Kommentar und probieren Sie das dort vorhandene Apfelstrudel-Unicode-Normalisierungstool aus. Sehr nützlich für APFS, sinnlos mit exFAT. Oder ist es...?
Doc G.
1
@ DocG. Dieses Problem ist etwas komplexer als ich ursprünglich dachte, aber ich habe meine Antwort erneut aktualisiert!
Bitinn
Ja, ich dachte, Sie könnten das am Ende tun. Error 36Weitere Informationen zum Trennen von Dateizuordnungen auf Nicht-HFS-Systemen finden Sie in meinem früheren Kommentar zu und führen Sie eine Websuche nach "Dateien hin und her verschieben Windows Mac-Fehler 36" durch. Dies ist (ein weiteres) bekanntes Problem bei der Benennung von MacOS / OS X-Dateien seit System 10.6. Zwischen der Unicode-Normalisierung und der Attributtrennung dot_underscore ist ein doppelter Fehler aufgetreten. Ich bezweifle, dass der Befehl dot_clean eine Chance hatte.
Doc G.