tar: Это не похоже на архив tar

tar: Это не похоже на архив tar

Я разделил огромную папку:

$ tar cvpf - somedir | split -b 50000m

… а затем я перенес разделенные файлы на другой сервер и объединил их:

$ cat x* > somedir.tar.gz

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

$ tar xvf somedir.tar.gz
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Archive contains obsolescent base-64 headers
tar: Error exit delayed from previous errors

Как мне перенести/извлечь его снова в папку? Спасибо

решение1

  1. Вы не выполнили сжатие, поэтому не называйте целевой файл somedir.tar.gz— назовите егоsomedir.tar
    • это не имеет отношения к вашей проблеме — tar xvfтем не менее, должно было сработать
  2. Еще раз проверьте, является ли ваша передача (особенно если она осуществляется через FTP) двоичной (а не текстовой)
  3. Наконец, проверьте, что файлы действительно были переданы правильно.
    • для этого вы можете проверить размеры исходного и целевого файлов
    • или, что еще лучше, сопоставьте их суммы MD5 с обеих сторон (это также проверит пункт 2)

Если вы проверили вышеуказанные пункты и суммы MD5 совпадают на обоих концах, вам следует сначала попробовать проверить разделение. Итак, работают ли join и tar-tf на исходной машине?

Если ваш somedirочень большой, попробуйте рабочий процесс с небольшим каталогом.
Используйте его tar cvpfдля получения простого tarball сначала, разделите и протестируйте после повторного присоединения.
Теперь скопируйте разделение на целевую машину, как и раньше, и протестируйте после повторного присоединения там.
Это должно ускорить обнаружение вашей проблемы.

решение2

Не называйте ваш объединенный tarball somefile.tar.gz, так как оннетсжатый. Чтобы избежать путаницы tarс автоматическим определением сжатия, вам действительно нужно назвать его somefile.tar.

Цитата из tarинформационного руководства:

Алгоритм распознавания формата основан на "сигнатурах", специальных последовательностях байтов [sic] в начале файла, которые являются специфическими для определенных форматов сжатия. Если этот подход не срабатывает, `tar' возвращается к использованию суффикса имени архива для определения его формата ...

Итак, скорее всего, ваш tarball не начинается ни с одной из сигнатур известных методов сжатия, поэтому tarвозвращается к использованию имени файла для определения сжатия. В вашем случае имя заканчивается на .gz, поэтому оно предполагает gzipсжатие. Это приводит к ошибкам, которые вы получаете, поскольку файл на самом деле не сжат.

tl;dr: Назовите tarball с суффиксом .tar, а не .tar.gz.

Связанный контент