How to use tar --strip-components
and zip --junk-paths
to remove absolute path from the archive. Tar is an archiving utility which needs no introduction to Linux users. In this article I will help you understand more about
tar --strip-components
zip --junk-paths
Both these options perform the same task i.e. stripping the relative path while extracting the archive.
Method 1: Use tar --strip-components to strip absolute path
Create tar archive
First let us create an archive. In this example I have created a nested directory structure under /tmp
which we can check using tree
command
# tree /tmp/dir1/
/tmp/dir1/
└── dir2
└── dir3
├── file1
├── file2
├── file3
├── file4
└── file5
2 directories, 5 files
I will create tar archive using GZIP compression and store it inside /root as myarchive.gz
# tar -czvf /root/myarchive.gz /tmp/dir1/dir2/dir3
Snippet from my terminal
Extract archive without tar --strip-components
By default tar stores the absolute path of file. I will extract this archive content under /extract
# tar -xzvf /root/myarchive.gz -C /extract/
Snippet from my terminal
The archive extracts and stores the absolute path which may not be required in most cases
# tree /extract/
Snippet from my terminal
Extract archive with tar --strip-components
- In this example, we will strip the absolute path while performing the tar extract
- Provide a numerical value with
--strip-components
, this number represents the number pf paths you want to strip while performing the extract - In this example there are 4 directories which we want to strip from the output so we will use
--strip-components=4
- Here
-C DIR
means change to DIR before performing any operations
# tar -xzvf /root/myarchive.gz --strip-components=4 -C /extract
Snippet from my terminal
Verify the content. Now we don't have absolute path after extracting the archive.
# ls -l /extract/
Snippet from my terminal
Method 2: Use zip --junk-paths to remove absolute path
We can perform similar operation with zip command in Linux and Unix
Create zip archive without --junk-paths
First let me create a zip archive using BZIP2 compression myarchive.bz2
under /root
# zip -Z bzip2 /root/myarchive.bz2 /tmp/dir1/dir2/dir3/*
Snippet from my terminal
By default, the archive here also store the absolute path of the file
Extract zip archive
We will extract this archive using unzip
and store it inside /extract
folder
# unzip /root/myarchive.bz2 -d /extract/
Snippet from my terminal
As expected, we have absolute path of the files under /extract
# tree /extract/
Snippet from my terminal
Create zip archive using --junk-paths
Now we will remove the absolute path of the file and just store the relative path by using zip with --junk-paths
Since we are creating zip archive with bzip2 compression, we have used -Z bzip2
# zip -Z bzip2 --junk-paths /root/myarchive.bz2 /tmp/dir1/dir2/dir3/*
Snippet from my terminal
From the output we can see that the absolute path is not stored any more with zip --junk-paths
Extract zip archive
We will extract this archive using unzip
and keep the files under /extract
# unzip /root/myarchive.bz2 -d /extract/
Snippet from my terminal
So we have no absolute path anymore for the files under our archive
# ls -l /extract/
Snippet from my terminal
So you can use either zip with --junk-paths
or tar with --strip-components
to remove absolute path
Lastly I hope the steps from the article to understand tar --strip-components
and zip --junk-paths
on Linux and Unix was helpful. So, let me know your suggestions and feedback using the comment section.
References:
man page for tar
man page for zip
This is a good explanation!