Есть ли способ добавить / обновить файл в архиве tar.gz? По сути, у меня есть архив, который содержит файл, /data/data/com.myapp.backup/./files/settings.txt
и я хотел бы извлечь этот файл из архива (уже сделано) и вставить его обратно в архив после завершения редактирования. Как я могу сделать это? Это проблематично из-за .
в пути?
73
.DS_Store
и затем повторно скопировать каталог.Ответы:
Формат файла tar представляет собой просто серию файлов, соединенных вместе с несколькими заголовками. Это не очень сложная работа - разорвать ее на части, сложить содержимое и собрать обратно. При этом, Джандер описал, как tar как программа не имеет вспомогательных функций для этого, и есть дополнительные сложности со сжатием, которое должно иметь место как до, так и после внесения изменений.
Однако есть инструменты для работы! Существует как минимум две системы, которые позволят вам выполнить петлевое монтирование сжатого архива tar в папку, а затем внести изменения в файловую систему. Когда вы закончите, размонтируйте папку, и ваш сжатый архив готов к работе.
Одним из первых вариантов будет проект архивирования для FUSE . Вот учебник по этому вопросу . В вашей системе, вероятно, уже есть FUSE, и если нет, то в вашем дистрибутиве должна быть опция.
Другой вариант - tarfs . Его проще использовать , но я слышал, что у него есть проблемы с повреждением архивов bzip2, поэтому вы можете сначала довольно тщательно его протестировать.
источник
Чтобы вытащить ваш файл из вашего архива, вы можете использовать
tar xzf archive.tar.gz my/path/to/file.txt
. Обратите внимание, что каталоги в пути к файлу также будут созданы. Используйтеtar t
(т.е.tar tzf archive.tar.gz
), чтобы перечислить файлы в архиве.tar
не поддерживает обновление файлов на месте. Однако вы можете добавить файлы в конец архива, даже если они имеют тот же путь, что и файл, уже находящийся в архиве. В этом случае обе копии файла будут находиться в архиве, а файл, добавленный позже, переопределит предыдущую. Команда, которую нужно использовать для этогоtar r
(илиtar u
только для добавления файлов, которые новее, чем архив), это команда для использования. На.
пути не должно быть проблем.Однако есть одна загвоздка: вы не можете добавить в сжатый архив. Так что вы должны сделать:
Что, вероятно, не то, что вы хотите услышать, поскольку это означает переписывание всего архива дважды. Если это не очень большой архив, возможно, лучше распаковать его целиком, а затем заново отредактировать после редактирования. Кроме того, вы можете использовать несжатый архив.
источник
tar
программы. Тар как формат файла на самом деле очень доступен. Вы можете легко написать скрипт для обновления содержимого самостоятельно, но есть другие инструменты, которые уже делают это .gzip -dc archive.tar.gz | tar -r data/data/com.myapp.backup/./files/settings.txt | gzip >archive_new.tar.gz
Изначально Tar предназначался для использования с лентами, поэтому «замена» файлов в действительности не предусмотрена. Однако вы можете использовать --delete для удаления файла из исходного tar, а затем -u для обновления tar и повторного добавления файла. Это может занять некоторое время, так как tar нуждается в внутренней реорганизации архива.
источник
на моем Linux x86_64 GNU / Linux для выполнения этой операции я просто использую следующую команду:
Эта команда вызывает создание сжатого архива
/path
с использованием списка файлов, включенных вlist.txt
файл.источник
/path/archive.tar
вместо добавления / обновления этого файла.