I am attempting to create a script that can compress files with a certain extension in a number of directories into a single tar-ball. Currently what I have in the script file is:
find "$rootDir" -name '*doc' -exec tar rvf docs.tar {} \;
Where $rootDir
is the base path to search.
This is fine except the paths are absolute in the tar file. I would prefer the paths to be relative to $rootDir
. How would I go about doing this?
Example of current tar -tf docs.tar
where $rootDir
is /home/username/test
output:
home/username/test/subdir/test.doc
home/username/test/second.doc
What I desire the output to be:
./subdir/test.doc
./second.doc
Best Answer
If you run
find
from the desired root directory and don't specify an absolute starting point infind
's options, it will output relative paths to thetar
command invocations it constructs. Like so:If you do not want to change the current working directory permanently and are using
bash
or similar as your shell you could doinstead.
Note that pushd/popd are not present in all shells, so check the man page as appropriate. They are present in bash but not in the base sh implementation so while explicitly using
/bin/bash
you can rely on them you can't if a script asks for/bin/sh
instead (as this may map to a smaller shell that doesn't have bash's enhancements)