Я создал файл 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 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
Если вы хотите обновить определенный файл в *.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
Ответы:
Для этого вы обычно используете флаг -u. Из справочной страницы 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
файл доступенНапример, если вы хотите изменить simple.tar.gz, который находится в
/home/test/
каталоге:И в пустом редакторе введите
:n simple.tar.gz
и нажмите, Enter вы получите список папок и файлов, переместите курсор туда, где вы хотите изменить и нажмите Enter. Будет показанvi
редактор конкретного файла. Затемi
вариант, чтобы изменить файл. После удачной смены. Нажмите Escклавишу и выберите,:wq
чтобы написать и выйти из файла. Затем используйте,:q
чтобы выйти из списка файлов.источник
Если вы собираетесь делать это повторно, оптимизация может быть:
источник