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

$ 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

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

2 ответа2

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

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

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

1

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

Цитирование из справочника tar :

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

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

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

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