find или ls не выводит список всех файлов в папке в MacOS (HFS +)

362
Gerard Yin

lsили findкоманда, кажется, не находит все файлы, расположенные в определенной папке. Я использую Mac (под El Capitan 10.11.6 (15G21013), 500 ГБ SSD, HFS +). В одном из моих папок, где у меня есть около 700k файлов, у меня есть файл, который можно открыть, и lsили findбудет найти его, если я указать имя файла. Тем не менее, lsили findприменяется к папке не сможет найти файл. Похоже ли это на повреждение HFS +? Какие методы или инструменты рекомендуются для устранения такой проблемы с минимальным временем простоя и риском для моей файловой системы?

11:16:35 gyin @ mymac: [~ /]: ls dis / ASA.md Дис / ASA.md 11:19:06 gyin @ mymac: [~ /]: найти dis / ASA.md Дис / ASA.md 11:19:40 gyin @ mymac: [~ /]: найти дис | grep "ASA.md" Дис / CASA.md Дис / DASA.md 11:19:55 gyin @ mymac: [~ /]: ls dis | grep "ASA.md" CASA.md DASA.md 11:20:36 gyin @ mymac: [~ /]: найти дис | туалет 717004 

Обновить:

После ответа Камиля это не похоже на проблему с Unicode.

13:28:12 gyin @ mymac: [~]: найти 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 ответ на вопрос

1
Kamil Maciorowski

Возможный сценарий:

Есть Аот кириллицы и есть Aот латыни . Они могут выглядеть одинаково, но кодируются по-разному.

Если вторая буква «A» в проблемном имени файла не является латиницей, возможно, вы набрали:

ls dis/AS 

затем нажмите, tabи ваша оболочка автоматически заполнит имя кириллицей, вы даже не почувствуете разницу. Вы заметили, что это lsсработало.

Затем вы нажимаете , выполняете встроенное редактирование и превращаетесь lsв find, не касаясь пути (он все еще содержал нелатинский символ). Вы заметили, findработает.

Но когда вы печатаете grep, вы печатаете ASA.mdвручную. Это все латынь, в ней нет кириллицы. Команды не работают так, как вы ожидаете.

Я не говорю, что это Aточно. Я говорю, что один или несколько персонажей могут быть не такими, как вы думаете.


Чтобы подтвердить или отклонить этот сценарий, я бы проанализировал шестнадцатеричный вывод findкоманды, которая работает :

find dis/ASА.md | xxd 

и сравните с этой командой, набранной вручную :

echo dis/ASA.md | xxd 

Примечание: мой пост использует кириллицу Ав нескольких местах, поэтому не копируйте и не вставляйте ее бездумно.


С другой стороны, ваш буквальный код, размещенный в теле вопроса, кажется, используется dis/ASA.mdсогласованным, только на латинице. Если он был скопирован с терминала (не напечатан независимо), то моя гипотеза, вероятно, не относится к вашему конкретному случаю.

Большое спасибо, Камил. Я только что попробовал трюк с xxd, набрав вручную команду echo, и результаты были строго эквивалентны (см. Обновление в вопросе). Во всяком случае, голосование за интересный сценарий и за потраченное время. Gerard Yin 5 лет назад 0