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

32

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

xpanta
источник
1
См. Также unix.stackexchange.com/questions/13093/…
анатолий techtonik

Ответы:

28

Для этого вы обычно используете флаг -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 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

Для более подробного ознакомления см. Здесь: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html.

roadmr
источник
2
ОП спрашивал об обновлении сжатого архива, который не может быть обновлен.
QkiZ
18

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

Вы не можете обновить сжатый архив 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
источник
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чтобы выйти из списка файлов.

Приянка
источник
1

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

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
Шубхам Чаудхари
источник