Файл, который мне нужно разделить, составляет 32 ГБ.

Мне нужно разделить файл на две части со смещением, которое я укажу, и мне нужно только сохранить вторую часть.

Я могу сделать это легко:

dd if=binary_file.bin of=second_part.bin bs=1 skip=143254

Однако, это занимает очень много времени (часов), и мне нужен метод командной строки, который завершит процесс намного быстрее.

Какие-либо предложения?

Я использую OS X 10.11.6 (El Capitan).

1 ответ1

0

Может быть, прочитать несколько байтов до границы 4 КБ, а затем вторую команду, чтобы добавить остальные?

Предполагая, что мы хотим закончить на границе 4K (большинство файловых систем, похоже, используют внутренние буферы 4K).

  1. Перейдите к той части, где вы хотите начать читать. (bs = 1 пропуск = 143254)
  2. читать с 143254 по 143254 с bs = 1 и счетом = 3990
  3. Прочитайте остальную часть файла с bs = 4k и добавьте его в выходной файл. (Смотрите, как добавить данные в файл с помощью dd здесь, на SU)

Если это слишком медленно и вы пишете это как повторяющуюся задачу, вы можете даже оптимизировать ее, выполнив 512b чтений для первых 3584 байтов (7 * 512), затем 400-разрядные однобайтовые чтения, а остальные - размером 4 КБ.

Обратите внимание, что этот ответ воспринимается как обходной путь. Я буду любить читать другие ответы, которые привлечет этот вопрос. Может быть, даже чистое решение, которое просто ищет 143254, а затем использует обычную опцию чтения / записи для копирования, что позволяет использовать настройки файловой системы по умолчанию, а не мои явные предположения о 4k внутренних буферах.

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