Скрипты Bash: Как исправить файлы? (написать данную строку в заданной позиции файла) - PullRequest
3 голосов
/ 04 марта 2011

Я пишу скрипт для изменения UUID раздела NTFS (AFAIK, его нет).Это означает запись 8 байтов от 0x48 до 0x4F (72-79 десятичных), равных /dev/sdaX (X - номер моего раздела).

Если бы я хотел изменить его на случайный UUID, я мог бы использовать это:

dd if=/dev/urandom of=/dev/sdaX bs=8 count=1 seek=9 conv=notrunc

Или я мог бы изменить /dev/urandom на /dev/sdaY, чтобы клонировать UUID из другого раздела.

Но ... что, если я хочу создать персонализированный UUID?Я уже сохранил (и проверил регулярные выражения) в переменной $UUID в формате шестнадцатеричной строки (16 символов), например:

UUID="2AE2C85D31835048"

Я думал об этом подходе:

echo "$UUID" | xxd -r -p | dd of=/dev/sdaX ...

Это всего лишь царапина ... я не уверен насчет точных опций, чтобы заставить его работать.Мой вопрос:

  • Является ли echo $var | xxd -r | dd действительно лучшим подходом?
  • Какая будет точная команда и опции, чтобы она работала?

Что касается ответов, я также ищу:

  • Объяснение всех используемых опций и что они делают.
  • Если возможно, альтернативная команда, чтобы проверить его вфайл и / или экран перед сменой раздела.

У меня уже есть 100-байтовый файл дампа ntfs.bin, который я могу использовать для тестов и проверки результатов, используя

xxd ntfs.bin

Так что любое решение, которое дает мне возможность проверить результаты, используя xxd на экране, чтобы я мог сравнить с оригинальным файлом ntfs.bin, будет высоко оценено.

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 марта 2011

Попробуйте:

UUID="2AE2C85D31835048"
echo "$UUID" | xxd -r -p | wc -c
echo "$UUID" | xxd -r -p | dd of=file obs=1 oseek=72 conv=block,notrunc cbs=8
1 голос
/ 04 марта 2011

См. Здесь:

Заменить символы в файле на индекс

# start at char 20, replace the next 11 chars with '#'
echo '###########' | dd  of=FILENAME seek=20 bs=1 count=11 conv=notrunc
...