Відповіді:
Зазвичай для цього використовується прапор -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
Не можна оновити стислий архів TAR ( .tar.gz ) за один крок. Але якщо у вас достатньо вільного місця, ви можете зробити це:
Витяг файлу .tar з файлу .tar.gz :
gunzip filename.tar.gz
Оновіть нестиснений файл .tar за допомогою tar -u
команди:
tar -uf filename.tar new_file
Стисніть оновлений файл .tar :
gzip filename.tar
Якщо у вас багатоядерний процесор, я рекомендую використовувати pigz
замість цього gzip
для вилучення та створення .gz файлів. ( pigz
це багатопотокова реалізація gzip
)
Просто замініть gzip
/ gunzip
команди на pigz
/ unpigz
.
Якщо ви хочете оновити певний файл у *.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
для виходу зі списку файлів.
Якщо ви будете робити це неодноразово, оптимізацією може бути:
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