Как смонтировать изображение mdf, работу iso9660 doens't для него?

Во-первых, несколько вопросов оболочки:

  • Не использовать for fname in `find …` поскольку это исказит имена файлов и перестанет работать (потому что командная строка является слишком длинной), если существует слишком много файлов со слишком длинными именами. Использовать find -exec вместо этого. Так как Вы должны окружить расширение в команде, выполняемой find, вызовите оболочку.
  • Вам нужны двойные кавычки вокруг замен команды, а также подстановок переменных ("$fname", "$(echo …)").
  • echo обратные косые черты искажений на нескольких оболочках (это также искажает несколько начала аргументов -, но это не проблема здесь, так как все аргументы начнутся ./). Способ распечатать любую строку буквально printf "%s\n" "$fname", или printf "%s" "$fname" для предотвращения заключительной новой строки. Здесь я не вижу оснований для взятия хеша имени файла плюс заключительная новая строка в противоположность хешу имени файла.

Таким образом, мы получаем эту команду:

find . -type f -exec sh -c 'mv "$0" "$(printf "%s" "$0" | sha1sum | cut -f1 -d" ").html' {} \;

Это будет немного быстрее для вызова оболочки для целого пакета имен сразу.

find . -type f -exec sh -c 'for fname; do mv "$fname" "$(printf "%s" "$fname" | sha1sum | cut -f1 -d" ").html; done' _ {} +

Проблема с этим методом - это если mv начинает действовать прежде find закончил пересекать каталог, файлы, которые были перемещены, могут быть взяты mv. Это не проблема с Вашей командой, потому что она ожидает find закончиться прежде, чем запустить движущиеся файлы. Так помещает переименованные файлы в другую иерархию каталогов. Это решит другую проблему, которую также имеет Ваша предложенная команда, который является этим mv может перезаписать существующий файл, который, оказывается, называют .html.

mkdir ../staging
find . -type f -exec sh -c 'for fname; do mv "$fname" ../staging/"$(printf "%s" "$fname" | sha1sum | cut -f1 -d" ").html; done' _ {} +
find . -depth \! -name "." -type d -exec rmdir {} +
mv ../staging/* .

Теперь по Вашему основному вопросу: два файла с различными путями отобразятся на два различных хеша SHA-1. Математически разговор, там существуйте отличные строки с идентичными хешами SHA-1 (это очевидно, так как существует бесконечно много строк, но только конечно много хешей). Однако в сущности никто не знает, как найти их: нет никакой известной коллизии для SHA-1. Возможно, что однажды в будущем SHA-1 будет поврежден, в этом случае Ваша процедура будет безопасна только против случайных коллизий, не против злонамеренных взломщиков. Если это происходит (не скоро), необходимо обновить до того, что считают безопасным хеш-алгоритмом в то время.

Что касается Вашего второго вопроса: хеш полностью определяется строкой, которую Вы хешируете. Таким образом, если у Вас есть два названные файла tweedledum/staple и tweedledee/staple и Вы выполняете ту процедуру переименования из каждого каталога tweedledee и tweedledum в свою очередь затем оба каталога закончатся с названным файлом 1c0ee9c1eed005a476403c7651b739ae5bc7cf2a.html. Если Вы хотите иметь различные имена, необходимо поместить некоторое различающее содержание в хешированный текст, такой как название каталога.

25
28.08.2012, 13:53
2 ответа

Попытайтесь сначала преобразовать его в файл ISO, с mdf2iso (необходимо установить его) как это:

mdf2iso your_file.mdf

Linux не может смонтировать mdf файл (который является закрытым форматом), исходно. Или, можно попытаться переименовать его в "your_file.iso" и смонтировать его с командой, которую Вы дали, но это не работает с каждым изображением mdf.

Или если Вы используете X-сервер, можно попробовать программное обеспечение acetoneiso который является в основном своего рода Инструментами Демона / Алкоголь 120% для Linux.

30
27.01.2020, 19:40
  • 1
    Спасибо за указание на Acetoniso (который, в свою очередь, использует PowerISO), но в настоящий момент я должен все же найти программу Linux, которая смогла бы вытащить любой смысл из Алкоголя образа CD MDS+MDF, 52% создают... –  Jānis Elmeris 25.02.2014, 21:32
  • 2
    Возможно, одно маленькое дополнение: mdf2iso находится в AcetoneISO на Fedora. –  polemon 27.06.2017, 05:20

Существует также FuseISO , драйвер файловой системы пользовательского пространства. Хотел бы я знать об этой опции несколько лет назад, потому что я тоже только что конвертировал их с помощью mdf2iso . Поскольку я предпочитаю сохранять исходные файлы, это сделано для беспорядка.

3
27.01.2020, 19:40

Теги

Похожие вопросы