Обновление одного файла в сжатом tar

Учитывая сжатый файл архива, такой как application.tar.gz, в котором среди прочих есть папка application/x/y/z.jar, я хотел бы иметь возможность взять мою самую последнюю версию z.jar и обновить/обновить архив с ней.

Есть ли способ сделать это, кроме следующего?

tar -xzf application.tar.gz
cp ~/myupdatedfolder/z.jar application/x/y
tar -czf application application.tar.gz

Я понимаю, что переключатель -u в tar может быть полезен, чтобы избежать необходимости распаковывать все это, но я не уверен, как именно его использовать.


person Phil    schedule 02.06.2010    source источник


Ответы (3)


Что ж, я нашел ответ.

Вы не можете использовать tar -u с заархивированным архивом. Поэтому решение, которое я использовал, было следующим. Обратите внимание, что для этой цели я переместил файл z.jar в папку, созданную в текущем каталоге под названием application/x/y.

gzip -d application.tar.gz
tar -uf application.tar application/x/y/z.jar
gzip application.tar

Когда я сделал tar -tf application.tar (после обновления, до gzip), он появился правильно.

person Phil    schedule 02.06.2010

Если файл, который вы хотите обновить, является текстовым файлом. Затем вы можете напрямую использовать редактор vim, чтобы открыть архив, содержащий файл, и открыть его, точно так же, как открыть папку с помощью редактора vim. Затем измените файл, сохраните его и выйдите.

Однако, если файл является двоичным. Я понятия не имею о решении.

person Conghui He    schedule 27.04.2013

в моем случае мне пришлось удалить файл, а затем добавить новый файл, выполнив следующие действия:

мой tar-файл

file.tar
└── foo.json
└── bar.json
└── dir
    └── zoo.json

и я хотел только изменить/обновить файл foo.json без извлечения и повторного создания всего файла tar file.tar. Вот команды:

tar -x -f file.tar foo.json # extract only foo.json file to my current location
# now modify the file foo.json as you want ...
tar --delete -f file.tar foo.json # delete the foo.json file from the file.tar
tar -uf file.tar foo.json # add the specific file foo.json to file.tar

сжатый файл:

если это сжатый файл, такой как file.tar.gz, вам нужно будет извлечь tar-файл из сжатого файла (в этом примере gzip) с помощью gunzip file.tar.gz, который создаст для вас tar-файл file.tar. после этого вы сможете выполнить вышеупомянутые шаги.

в конце вы должны снова сжать tar-файл, используя gzip file.tar, который создаст для вас сжатый файл с именем file.tar.gz

подкаталоги:

для обработки подкаталогов вам придется сохранить ту же структуру и в файловой системе:

tar -x -f file.tar dir/zoo.json
# now modify the file dir/zoo.json as you want ...
tar --delete -f file.tar dir/zoo.jsonfile.tar
tar -uf file.tar dir/zoo.json

просмотреть структуру файла:

с помощью команды less вы можете просмотреть структуру файла:

less file.tar

drwxr-xr-x root/root         0 2020-10-18 11:43 foo.json
drwxr-xr-x root/root         0 2020-10-18 11:43 bar.json
drwxr-xr-x root/root         0 2020-10-18 11:43 dir/zoo.json

person dsaydon    schedule 04.12.2019
comment
Я не уверен, что вы можете обновлять сжатые архивы (как вы предложили в конце комментария). - person Shadow Template; 09.09.2020