find oder ls listet nicht alle Dateien in einem Ordner in MacOS (HFS +) auf

431
Gerard Yin

lsoder findBefehl scheint nicht alle Dateien in einem bestimmten Ordner zu finden. Ich verwende einen Mac (unter El Capitan 10.11.6 (15G21013), 500 GB SSD, HFS +). In einem meiner Ordner, in dem ich ungefähr 700.000 Dateien habe, habe ich eine Datei, die ich öffnen kann, lsoder sie findwird sie finden, wenn ich den Dateinamen eingebe . Jedoch lsoder findauf dem Ordner angewandt wird nicht in der Lage, die Datei zu finden. Sieht das aus wie eine HFS + -Korruption? Welche Methoden oder Tools werden empfohlen, um ein solches Problem mit minimalen Ausfallzeiten und Risiken für mein Dateisystem zu beheben?

11:16:35 gyin @ mymac: [~ /]: ls dis / ASA.md dis / ASA.md 11:19:06 gyin @ mymac: [~ /]: find dis / ASA.md dis / ASA.md 11:19:40 gyin @ mymac: [~ /]: find dis | grep "ASA.md" dis / CASA.md dis / DASA.md 11:19:55 gyin @ mymac: [~ /]: ls dis | grep "ASA.md" CASA.md DASA.md 11:20:36 gyin @ mymac: [~ /]: find dis | wc -l 717004 

Aktualisieren:

Nach Kamils ​​Antwort sieht es nicht nach einem Unicode-Problem aus.

13:28:12 gyin @ mymac: [~]: find dis / ASA.md | xxd 00000000: 6469 732f 4153 412e 6d64 0a dis / ASA.md. 13:28:25 gyin @ mymac: [~]: echo dis / ASA.md | xxd 00000000: 6469 732f 4153 412e 6d64 0a dis / ASA.md. 13:28:34 gyin @ mymac: [~]: 
3

1 Antwort auf die Frage

1
Kamil Maciorowski

Mögliches Szenario:

Es ist Аaus kyrillischer Schrift und Aaus Latein . Sie können gleich aussehen, sind aber anders codiert.

Wenn das zweite "A" in dem problematischen Dateinamen nicht lateinisch ist, haben Sie möglicherweise wie

ls dis/AS 

Dann drückst tabdu und deine Shell hat den Namen mit Kyrillisch automatisch abgeschlossen, du hast den Unterschied nicht einmal gewusst. Sie haben bemerkt, dass dies lsfunktioniert hat.

Als Nächstes drücken Sie , haben eine Inline-Bearbeitung vorgenommen und wurden lszu einem findPfad, der den Pfad nicht berührt (er enthält immer noch nicht-lateinische Zeichen). Du hast bemerkt, dass es findfunktioniert hat.

Aber wenn Sie tippen grep, tippen Sie ASA.mdvon Hand. Es ist alles Latein, da ist kein Kyrillisch. Befehle funktionieren nicht wie erwartet.

Ich sage nicht, dass es Asicher ist. Ich sage, dass ein oder mehrere Charaktere möglicherweise nicht das sind, was Sie denken.


Um dieses Szenario zu bestätigen oder zu verwerfen, analysiere ich die Hex-Ausgabe des findBefehls , der funktioniert :

find dis/ASА.md | xxd 

und vergleichen Sie diesen Befehl mit der Hand :

echo dis/ASA.md | xxd 

Hinweis: In meinem Beitrag wird Kyrillisch Аan einigen Stellen verwendet. Kopieren Sie ihn also nicht und fügen Sie ihn nicht gedankenlos ein.


Auf der anderen Seite scheint Ihr buchstäblicher Code, der in den Fragenkörper eingefügt wurde, dis/ASA.mdeine zusammenhängende, ausschließlich lateinische Form zu verwenden. Wenn es vom Terminal kopiert wurde (nicht unabhängig eingegeben), trifft meine Hypothese wahrscheinlich nicht auf Ihren speziellen Fall zu.

Vielen Dank Kamil. Ich habe gerade Ihren xxd-Trick ausprobiert, den Echo-Befehl von Hand eingegeben, und die Ausgaben sind absolut gleichwertig (siehe Update in Frage). Wie auch immer, für das interessante Szenario und für die aufgewendete Zeit zu werben. Gerard Yin vor 5 Jahren 0