2015-01-15 1 views
0

Я пытаюсь создать контрольные суммы MD5 сотен тысяч фотографий на внешних дисках, используя следующую команду в ОС X 10.9.5. Однако я получаю кучу ошибок. Я использую find с именами файлов с нулевыми именами, переданными по протоколу xargs, потому что я думаю, что он работает быстрее всего.Добавление «-type f» вызывает ошибки «find», когда каталог содержит файлы со специальными символами в OS X

find . -type f -not -name "checksums.md5" -print0 | xargs -0 md5 -r > checksums.md5

Я сузил к использованию -type f, которые вы можете увидеть в этом следующем примере:

mymac:Finals user$ find . -name "0153*" 
./0153_IMG_4812_Coniston village.jpg 

mymac:Finals user$ find . -name "0153*" -type f 
./0153_IMG_4812_Coniston village.jpg 
find: ./0154_IMG_4814_Après hike.jpg: No such file or directory 

mymac:Finals user$ find . -name "0154*" 
./0154_IMG_4814_Après hike.jpg 

mymac:Finals user$ find . -name "0154*" -type f 
find: ./0154_IMG_4814_Après hike.jpg: No such file or directory 

Когда я запускаю оригинальную команду над моим жестким диском, я вижу куча ошибок «Нет такого файла или каталога», и эти файлы пропущены, не получают контрольную сумму.

Любые идеи?

+0

Действительно ли он жалуется на файл, начинающийся с «0154», когда вы используете шаблон имени «0153 *»? Я бы подумал, что даже не будет проверять тип, поскольку имя не соответствует шаблону. Некоторые другие мысли: какая файловая система использует внешние диски? Выполните вывод и stderr этих команд 'find' через' hexdump -C' и сравните байты имени файла в обоих случаях. Также сравните с шестнадцатеричным дампом вывода 'ls' в том же каталоге. –

+0

Да, он жалуется !!!! Позвольте мне попробовать ваше предложение – Clam

+0

Попробуйте 'export LC_TYPE = C' перед запуском' find'. –

ответ

0

У меня нет решения, но у меня есть обход: не копируйте файлы с диска HFS в NTFS с помощью драйверов HFS от Apple (в Bootcamp), но делайте это либо через SMB, либо совместно с VMWare Fusion (эффективно SMB?)

Существует два способа создания символа электронной грамотности. Один из них - использовать расширенный ASCII 0xE8 от CP1252, другой, как я только что узнал, по-видимому, должен использовать байты Unicode 0x0065 (обычная буква «e», ASCII 0x65) + 0x0300 (сочетающая серьезный акцент).

Когда я скопировать этот файл в Bootcamp, имя файла содержит UTF-16LE байтовой последовательности 0x65 0x00 0x00 0x03 (обычной буква «х» + комбинируя апостроф)

Когда я скопировать этот файл в слиянии VMWare либо Общая папка VMWare или общий доступ к файлу, имя файла содержит последовательность байтов UTF-16le 0xE800 (расширенный символ E-Grave ASCII).

назад под OS X, перенаправив вывод find в hexdump -C дает тот же UTF-8 последовательности байтов для обоих вариантов этого символа: 65 cc 80. По-видимому, это связано с тем, что вещи разваливаются для меня под OS X.

Смежные вопросы