Як я можу оновити файл tar.gz?


32

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


Відповіді:


28

Зазвичай для цього використовується прапор -u. Зі сторінки чоловіка з дьогтю:

 -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


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.

Пов'язані посібники


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.