Как обновить файл tar.gz?

19

Я создал файл tar.gz (используя графический интерфейс, а не командную строку). Как я могу обновить его с помощью команды добавления новых файлов и обновленных файлов?

    
задан xpanta 13.03.2013 в 12:54
источник

4 ответа

21

Обычно для этого используется флаг -u. Из man-страницы tar:

 -u, --update
       only append files newer than copy in archive

, чтобы эта последовательность выполняла то, что вам нужно:

# First create the tar file. It has to be UNCOMPRESSED for -u to work
tar -cvf my.tar some-directory/
# ... update some files in some-directory
# ... add files in some-directory
# Now update only the changed and added files
tar -uvf my.tar some-directory/
# Compress if desired
gzip my.tar

Для более детального просмотра см. здесь: Ссылка     

ответ дан roadmr 13.03.2013 в 13:26
источник
7

Решение / обходной путь

Невозможно обновить сжатый архив TAR ( .tar.gz ) за один шаг. Но, если у вас достаточно свободного места, вы можете сделать это:

  1. Извлеките .tar файл из файла .tar.gz :

    gunzip filename.tar.gz

  2. Обновить несжатый файл .tar с помощью команды tar -u :

    tar -uf filename.tar new_file

  3. Сжатие обновленного файла .tar :

    gzip filename.tar

Форсировочная

Если у вас многоядерный процессор, я рекомендую использовать pigz вместо gzip для извлечения и создать файлы .gz . ( pigz - многопоточная реализация gzip )

Просто замените команды gzip / gunzip на pigz / unpigz .

Соответствующие руководства

ответ дан andras.tim 28.01.2015 в 19:02
5

Если вы хотите обновить определенный файл в файле *.tar.gz , выполните следующие действия:

Введите vi , из которого доступен файл tar

/home>vi

Например, если вы хотите изменить simple.tar.gz , который находится в каталоге /home/test/ , выполните следующие действия:

/home/test>vi

И в пустой редактор введите :n simple.tar.gz и нажмите Enter вы получите список папок и файлов, перемещающих курсор, где вы хотите изменить И нажмите Enter . Он отобразит vi редактора конкретного файла. Затем выберите i для изменения файла. После успешного изменения. Нажмите клавишу Esc и выберите :wq для записи и выхода из файла. Затем используйте :q , чтобы выйти из списка файлов.

    
ответ дан priyanka 10.04.2014 в 11:28
0

Если вы собираетесь делать это повторно, оптимизация может быть:

if [[ -f my.tar.gz ]]; then
    if [[ ! -f my.tar ]]; then
        echo 'No tar, unzipping tar.gz'
        gunzip my.tar.gz
    fi
    tar -uvf my.tar file1 file2 file_new
    gzip -fk my.tar  # This keeps a copy of the tar.
    # -f --force overwrite existing .tar.gz
    # -k --keep Keep the input file (.tar file)
else
    tar -cvzf my.tar.gz file1 file2
fi
    
ответ дан Shubham Chaudhary 25.04.2017 в 11:43