Question: Given a compressed archive file such as `application.tar.gz` which has a folder `application/x/y/z.jar` among others, I'd like to be able to take my most recent version of `z.jar` and update/refresh the archive with it.

Is there a way to do this other than something like the following?

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

```

I understand the `-u` switch in tar may be of use to avoid having to untar the whole thing, but I'm unsure how to use it exactly.

Answer: 
If the file you want to update is text file. Then you can use `vim` editor directly to open the tarball that contains the file and open it, just like open folder using vim editor. Then modify the file and save it and quit.

However, if the file is a binary. I have no idea about the solution.
in my case, I had to delete the file and then add the new file with the following steps:

my tar file

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

```

and I wanted only to modify/update `foo.json` file without extracting and re-creating the whole tar file `file.tar`, Here are the commands:

```
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

```

**compressed file:**

if it is compressed file, like `file.tar.gz`, you will need to extract the tar file from the compressed file (in this example gzip) by using `gunzip file.tar.gz` which will create for you the tar file `file.tar`. then you will be able to do the **above** steps.

at the **end** you should compress the tar file again by using `gzip file.tar` which will create for you compressed file with the name `file.tar.gz`

**sub directories:**

in order to handle sub dirs you will have to keep the same structure also in the file system:

```
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.json
tar -uf file.tar dir/zoo.json

```

**view the file structure:**

by using the `less` command, you can view the structure of the file:

```
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

```