Назад | Перейти на главную страницу

Как извлечь файл tar, сжатый несколько раз

Из-за некорректного написания сценариев некоторые файлы, предназначенные для архивирования, были сжаты пять или шесть раз. Итак, есть такие файлы:

a_log_file_0.log.1.tar.gz.tar.gz.tar.gz.tar.gz.tar.gz

Пожалуйста, как мне исправить такие проблемные файлы?

Вам нужно будет разархивировать все уровни tar, которые были применены к вашему файлу. Если ваш файл был создан чем-то вроде

tar czf a_log_file_0.log.1.tar.gz a_log_file_0.log.1
tar czf a_log_file_0.log.1.tar.gz.tar.gz a_log_file_0.log.1.tar.gz
... 

вы можете разархивировать его шаг за шагом следующим образом:

tar xzf a_log_file_0.log.1.tar.gz.tar.gz.tar.gz.tar.gz.tar.gz
tar xzf a_log_file_0.log.1.tar.gz.tar.gz.tar.gz.tar.gz
tar xzf a_log_file_0.log.1.tar.gz.tar.gz.tar.gz
---

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

Вы можете убедиться, что у вас достаточно места на диске, куда вы извлекаете несколько уровней tar-файлов.

вы можете удалить промежуточные извлеченные версии ваших файлов.

Если вы сделали это вручную для нескольких таких файлов tar и только если вы уверены, что в каждом архиве tar с gzip-редактированием есть только один файл, вы можете автоматизировать многоуровневое извлечение следующим образом:

file=a_log_file_0.log.1.tar.gz.tar.gz.tar.gz.tar.gz.tar.gz
cp $file /tmp/
cd /tmp/
while echo $file | grep -n \\.tar\\..gz
do
  zfile=${file%.tar.gz}
  tar xzf $file
  rm $file
  file=$zfile;
done

Если имена неожиданно отличаются от имен в этой короткой строке, это не сработает - намеренно, потому что структура архива с несколькими tar не такая, как ожидалось.

Удачи при извлечении!