Как я могу обновить tar.gz досье?

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

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

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

таким образом, эта последовательность будет делать то, что вам нужно:

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

Более подробный обзор смотрите здесь: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html

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

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

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

    gunzip filename.tar.gz

  2. Обновление несжатого .смола файл с tar -u команда:

    tar -uf filename.tar new_file

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

    gzip filename.tar

Ускорение

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

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

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

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

Входить vi из того места, где tar файл доступен

/home>vi

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

/home/test>vi

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

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

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 file2fi

See also gzip - How to add/update a file to an existing tar.gz archive? - Unix & Linux Stack Exchange