Я создал 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) за один шаг. Но, если у вас достаточно свободного места, вы можете сделать это:
-
Извлекать .смола файл из .tar.gz файл:
gunzip filename.tar.gz -
Обновление несжатого .смола файл с
tar -uкоманда:tar -uf filename.tar new_file -
Сжатие обновленного .смола файл:
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