У меня есть несжатый файл TAR, созданный в Linux.

Если я использую less для просмотра файла, я могу видеть все данные; в основном кодовые файлы. Однако, если я пытаюсь распаковать его, я получаю следующую ошибку:

tar: нераспознанная ошибка формата архива.

Если я делаю file thetarfile.tar я получаю данные типа.

Как я могу извлечь файл?

3 ответа3

1

Тот факт, что файл имеет суффикс tar или tgz, не делает его файлом tar.

Вы можете проверить магическое число в заголовке файла с помощью команды file:

file myfile

И он сообщит тип файла. Это может быть формат zip, bzip или даже cpio.

Если он возвращает "данные", то это может быть не известный архив или вообще не архив.

0

Вы можете попытаться сохранить то, что еще возможно, с помощью утилиты cpio .
(GNU cpio копирует файлы в или из архива cpio или tar ...)

Команда ниже должна выполнить работу по извлечению файлов и воссозданию дерева каталогов:

      cpio -ivd -H tar < myfile.tar 

Ps> Работа в безопасном месте (справочник).

Подробно:

  • -i или --extract Запустить в режиме копирования.
  • -d или --make-directories Создайте ведущие каталоги, где это необходимо.
    (по умолчанию он не создает каталог)
  • -v или --verbose как часто пишут больше информации, на этот раз он перечисляет обработанные файлы.
  • -H format или --format=format Использовать формат формата архива.

Продолжить:
Это почти полный файл tar . В заголовке нет магического номера, есть финальная подпись. Кроме того, вы можете прочитать часть с текстовыми файлами (если вы используете меньше), так что без сжатия. Это повреждено. Почему (если сервер не завершил работу или был перенесен с повреждением некоторых частей) является второстепенным. Если вы можете создать его снова, это лучше. Если нет, вы можете попробовать то, что выше или ниже ...

Рекомендации:
Вы можете найти помощь на сайте cpio или на сайте mac .
Полный список опций


Альтернативы:

  • После этого поста и загрузки этого perl-скрипта, после этого вы распаковываете его (с помощью bunzip2 find_tar_headers.pl.bz2) вы можете использовать его:

    perl find_tar_headers.pl yourfile.tar
    

    он ответит серией строк как

    yourfile.tar: 12345: dir/subdir/yourfile: 126344
    yourfile.tar: 20578: dir/subdir/yourfile: 123453 ...

    прочитайте 1-е число, в данном случае 12345, и что должно решить вашу проблему

    tail -c +12345 yourfile.tar > extracted_tail_yourfile.tar
    tar xf extracted_tail_yourfile.tar
    
  • 75 73 74 61 72 00 30 30 или 75 73 74 61 72 20 20 00 являются сигнатурами для tar-файла. (согласно этому списку). Вы можете написать один из них по смещению 257 на копии вашего файла с помощью шестнадцатеричного редактора или с помощью dd и он будет распознан как tar файл. Возможно, вы тоже сможете извлечь что-то, но это все равно будет повреждено: лучше, если вы сможете сгенерировать это снова.

0

Это может быть несколько причин, по которым TAR будет считаться испорченным. Если бы это был частично завершенный архив, он просто был бы неполным, но, по крайней мере, не TAR до определенного момента. Если file thetarfile.tar возвращает «данные», возможно, это сжатый архив?

Одна идея состоит в том, чтобы видеть, есть ли, возможно, какая-то проблема возврата каретки / разрыва строки. И это может быть решено с помощью dos2unix, утилиты в Linux / Unix, которая преобразует возвраты каретки файлов / переносы строк в разрывы, совместимые с Linux. Чтобы использовать это просто сделайте следующее.

Сначала установите dos2unix . Неясно, на какой системе вы пытаетесь это сделать, но в Ubuntu вы можете запустить эту команду aptitude чтобы установить ее из репозитория:

sudo aptitude install dos2unix 

Теперь создайте копию оригинального .tar чтобы проверить его следующим образом:

cp tarfile.tar tarfile_TEST.tar

Теперь с dos2unix просто запустите эту команду:

dos2unix tarfile_TEST.tar

Вывод будет примерно таким:

dos2unix: converting file tarfile_TEST.tar to UNIX format ...

Затем попробуйте распаковать содержимое этого файла TAR следующим образом:

tar -xf tarfile_TEST.tar

Теперь, если вам нужно установить dos2unix в Mac OS X, здесь есть советы, как с этим справиться. Но это все догадка с моей стороны; не углубляйтесь слишком глубоко в эту теоретическую кроличью нору, пока она не покажет себя как истинное решение.

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