Я разделил огромную папку:
$ 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
- Вы не выполнили сжатие, поэтому не называйте целевой файл
somedir.tar.gz
— назовите егоsomedir.tar
- это не имеет отношения к вашей проблеме —
tar xvf
тем не менее, должно было сработать
- это не имеет отношения к вашей проблеме —
- Еще раз проверьте, является ли ваша передача (особенно если она осуществляется через FTP) двоичной (а не текстовой)
- Наконец, проверьте, что файлы действительно были переданы правильно.
- для этого вы можете проверить размеры исходного и целевого файлов
- или, что еще лучше, сопоставьте их суммы 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
.