tar выходит с bzip2: (stdin): запаздывающий мусор после EOF, проигнорированного после извлечения

Если размеры файла сопоставимы, оптимальное решение к sort оба файла столбцом Вы интересуетесь и затем join их тем столбцом. Если размеры файла N и M затем асимптотическое время выполнения O(N*log(N)+M*log(M)).

Если один из файлов очень намного меньше, чем другой, то O(N*M) решение в других ответах лучше.

3
30.09.2014, 22:33
2 ответа

мусор в трейлинге означает, что в конце файла имеются посторонние данные, не входящие в формат bz2; поэтому bz2 не могут иметь никакого смысла дополнительные данные (отсюда и мусор).

Если вы хотите спровоцировать ошибку:

$ echo Hello World | bzip2 > helloworld.bz2
$ echo Something not bzip2... >> helloworld.bz2
$ bunzip2 < helloworld.bz2
Hello World

bunzip2: (stdin): trailing garbage after EOF ignored

Первая команда создает действительный bzip2-файл, который содержит сообщение Hello World.

Вторая команда добавляет Что-то не bzip2.... к файлу bzip2. Это мусор, потому что он не сжат bzip2.

Выполняя эту команду через bzip2 выдает действительные данные, но печатает предупреждение о посторонних, игнорируемых данных.

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

$ hexdump -C helloworld.bz2 
00000000  42 5a 68 39 31 41 59 26  53 59 d8 72 01 2f 00 00  |BZh91AY&SY.r./..|
00000010  01 57 80 00 10 40 00 00  40 00 80 06 04 90 00 20  |.W...@..@...... |
00000020  00 22 06 86 d4 20 c9 88  c7 69 e8 28 1f 8b b9 22  |."... ...i.(..."|
00000030  9c 28 48 6c 39 00 97 80  53 6f 6d 65 74 68 69 6e  |.(Hl9...Somethin|
00000040  67 20 6e 6f 74 20 62 7a  69 70 32 2e 2e 2e 0a     |g not bzip2....|

Этот пример очевиден, так как в сжатых bzip2 данных вы обычно не видите обычного текста, подобного этому.

Большой вопрос, был ли мусор приложен (как в примере выше, оставив оригинальные данные нетронутыми), или произошло какое-то повреждение. Невозможно сказать по сообщению об ошибке (сам bzip2 не знает), однако, если бы это было случайное повреждение, вы бы тоже увидели некоторые сообщения об ошибке tar.

0
27.01.2020, 21:42

Если вы знаете точные параметры сжатия для файла (вероятно, только по умолчанию), вы можете получить фактические данные трейлинга:

Чтобы получить размер реального сжатого архива tar, перекомпрессуйте его.

Используя размер полученного файла - который должен быть меньше, чем размер исходного файла (может быть всего на один байт), получим часть после реальных данных:

tail -c +12345 witTrailingData.tar.bz2

(Это может быть дификулт с большим файлом)

.
0
27.01.2020, 21:42

Теги

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