3

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

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

Обновить:

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

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:[~]:

1 ответ1

1

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

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

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

ls dis/AS

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

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

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

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


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

find dis/ASА.md | xxd

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

echo dis/ASA.md | xxd

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


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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .