Разделение большого двоичного файла в разделы определяется шаблонами контекста

Выполненный which shutdown видеть, где путь к программе завершения работы. Можно переименовать файл, хотя я рекомендую против него.

Другой (более безопасный) метод. Используйте псевдоним: alias shutdown=' ' Что-то вроде этого более обратимо. При попытке предотвратить завершение работы от всех пользователей, добавьте псевдоним глобально.

5
02.07.2013, 00:20
3 ответа

Следующее будет работать:

      awk '/\^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%\^/{n++}{print >"out" n ".ear" }
3
27.01.2020, 20:35
  • 1
    Имейте Вас попробованный dcfldd команда? Решение Awk может стать проблематичным в некоторых ситуациях. –  Léo Léopold Hertz 준영 24.06.2015, 11:19

Вы сказали csplit разделять файл в одном местоположении в первом вхождении текста ^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%^. Таким образом, Вы естественно получили две части: тот, который содержит первый байт файла (там новая строка или пробел перед первым разделителем?) и тот, который содержит все от первого разделителя вперед.

Если Вы хотите разделить на отдельные файлы, необходимо будет повторять шаблон так много раз, как Вы хотите части минус одна. Портативно, необходимо считать части.

csplit --digits=2 --prefix=out stu.ear '/\^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%\^/'"{$(grep -c '\^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%\^' stu.ear)}"

GNU csplit имеет расширение, которое позволяет Вам повторить шаблон неопределенное количество раз:

csplit --digits=2 --prefix=out stu.ear '/\^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%\^/ {*}'

Но это не делает то, что Вы хотите, потому что разделитель включен в вывод. Можно удалить его из файлов позже; было бы немного легче, если Вы располагаете иметь разделители в конце файлов, с помощью % вместо / как разделитель шаблона (так csplit … '%\^\%\%-=-=-=-=-=-=-=-=-=-=-=-=-=-\%\%\^% {*}'). Но Вы могли бы также подчиниться тому, что csplit, в то время как милый, имеет очень узкий вариант использования, и Ваш не соответствует. Используйте инструмент в лучшем костюме, такой как awk.

1
27.01.2020, 20:35

Я записал немного инструмента Python, чтобы сделать это. https://github.com/mypalmike/csplitb

csplitb.py --prefix X --suffix Y --number Z XXXXXXXX input-file.extension
X = Имя в начале выходного имени файла
Y = Желаемое расширение выходного файла
Z = Количество цифр раньше дифференцировало выходные файлы
XXXXXXXX = Начинающее шестнадцатеричное число каждого двоичного файла, который будет разделен из входного файла
вход-file.extension = разделяемый файл

Пример:
csplitb.py --prefix photo --suffix .png --number 4 89504e47 block-file.raw

Вывод:

photo0000.png
photo0001.png
photo0002.png
.............
5
27.01.2020, 20:35
  • 1
    Добро пожаловать в Unix & Linux Stack Exchange! Пока это может теоретически ответить на вопрос, было бы предпочтительно включать основные части ответа здесь и предоставить ссылку для ссылки. –  slm♦ 15.11.2013, 03:47
  • 2
    Вы должны на наименьшем количестве шоу пример того, как использовать инструмент, который Вы рекомендуете. спасибо –  jordanm 15.11.2013, 05:57
  • 3
    Спасибо, но это не huge-files-friendly. Traceback (most recent call last): File "./csplitb/csplitb.py", line 64, in <module> main() File "./csplitb/csplitb.py", line 61, in main return csplitb.run() File "./csplitb/csplitb.py", line 30, in run self.finish() File "./csplitb/csplitb.py", line 42, in finish self.write(self.mm[self.last_idx:]) MemoryError –  Paul 05.11.2016, 10:54

Теги

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