Ответ 1
Вы уверены, что это gzip файл? Я бы сначала запустил "файл SMS.tar.gz", чтобы проверить это.
Тогда я прочитал бы страницу gzip Recovery Toolkit.
У меня есть большое количество файлов в архиве .tar.gz. Проверка типа файла командой
file SMS.tar.gz
дает ответ
gzip compressed data - deflate method , max compression
Когда я пытаюсь извлечь архив с помощью gunzip, после задержки я получаю сообщение
gunzip: SMS.tar.gz: unexpected end of file
Есть ли способ восстановить даже часть архива?
Вы уверены, что это gzip файл? Я бы сначала запустил "файл SMS.tar.gz", чтобы проверить это.
Тогда я прочитал бы страницу gzip Recovery Toolkit.
Восстановление возможно, но это зависит от того, что вызвало повреждение.
Если файл просто усечен, получение частичного результата не слишком сложно; просто запустите
gunzip < SMS.tar.gz > SMS.tar.partial
который даст некоторый результат, несмотря на ошибку в конце.
Если сжатый файл имеет большие отсутствующие блоки, он в основном безнадежно после плохого блока.
Если сжатый файл систематически поврежден небольшими способами (например, перенос двоичного файла в режиме ASCII, который разбивает вернет каретки и строки новой строки по всему файлу), можно восстановить, но требует довольно много настраиваемого программирования, это действительно только стоит того, если у вас нет абсолютно никакого другого обращения (нет резервных копий), и данные стоят больших усилий. (Я сделал это успешно.) Я упомянул этот сценарий в предыдущем вопросе.
Ответы на .zip файлы несколько различаются, поскольку zip-архивы имеют несколько отдельных сжатых элементов, поэтому есть большая надежда (хотя большинство коммерческих инструментов скорее фиктивные, они устраняют предупреждения, исправляя CRC, а не восстанавливая хорошие данные). Но ваш вопрос касался файла .tar.gz, который представляет собой архив с одним большим членом.
Вот один из возможных сценариев, с которыми мы столкнулись. У нас был tar.gz файл, который не распаковывался, пытаясь разархивировать сообщение:
gzip -d A.tar.gz
gzip: A.tar.gz: invalid compressed data--format violated
Я понял, что файл может быть первоначально загружен через не двоичное ftp-соединение (мы точно не знаем).
Решение было относительно простым с использованием утилиты unix dos2unix
dos2unix A.tar.gz
dos2unix: converting file A.tar.gz to UNIX format ...
tar -xvf A.tar
file1.txt
file2.txt
....etc.
Это сработало! Это одна тонкая возможность, и, возможно, стоит попробовать - это может помочь кому-то там.