root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
How can I solve this problem and keep the / on file names ?
root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
How can I solve this problem and keep the / on file names ?
If you want to get rid of "Removing leading `/' from member names" being printed to STDERR, but still want to leave off those leading slashes as tar wisely does by default, I saw an excellent solution here by commenter timsoft.
The solution involves using -C option to change directory to the root (/), then specifying the file tree to archive without a leading slash, because now you only need a relative path. This does the same thing as a normal tar create command, but no stripping is needed:
tar fcz bkup.tar.gz -C / home/foo/
Use the --absolute-names or -P option to disable this feature.
tar fczP bkup.tar.gz /home/foo
tar fcz bkup.tar.gz --absolute-names /home/foo
That's actually a feature, not a problem. Archives with absolute locations are a security risk. Attackers could use such archives to trick users into installing files in critical system locations.
Yes, you could use -P. But what's wrong with allowing tar to remove the forward slash, and simply requiring the user of the archive to explicitly do the extraction in the root directory? Then they're consciously impacting critical system locations, and can't do it by accident.
One month late, but I found the most appropriate solution for my case (in a shell script) is to go to the parent directory and execute the command there.
cd /var/www/
tar -czf mysite.gz mysite
Instead of:
tar -czf /var/www/mysite.gz /var/www/mysite
This is how I did it by using brute force method: 2>&1 | grep -v "Removing leading".
For example:
tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v "Removing leading"
Try to use -C for path only which would prevent compressing with complete paths:
root@server # tar fcz bkup.tar.gz -C /home/ foo/
I solved this problem with:
cd /home/foo && tar czf ~/backup.tar.gz .
that way you aren't trying to put absolute paths into the tar archive in the first place. If you want untar it at the root of the file system you just
cd / && tar xzf backupt.tar.gz after transferring it.
The path of the archive when specified causes this informational message, you can do the following to resolve it:
tar -zvcf /tmp/mike.tar.gz -P /tmp/mike
or
tar -zvcf mike.tar.gz -P /tmp/mike
or
tar -zvcf mike.tar.gz /tmp/mike
Note: it is not an error, just informational.
its not a feature, its a bug. removing absolute paths creates an unextractable archive if path data gets fooey somehow. tar spits out the error and refuses to extract anything. better to use tardy to filter the path first.