I'm .taring some files with the path example/super_user/Output.*.
The resulting .tar looks like this:
+ example + super_user - Output.zip - Output.xml - Output.txt But I want the file to be like the following:
- Output.zip - Output.xml - Output.txt Do you know how I can achieve this while still being in another directory?
28 Answers
tar will preserve the file and folder structure so I don't think there's any way to instruct tar to flatten the hierarchy at creation time.
One workaround is to temporarily change directory, create the tar, then go back - a quick example below:
cd example/super_user && tar -cvf ../../result.tar Output.* && cd ../.. If the directory 'example' is at the root of the filesystem, here's another way:
tar -C /example/super_user -cvf result.tar . this will change directory to the point that you want to do the tar. The caveat is that if there are any subdirectories under /example/super_user, the directory structure will be preserved for these sub-directories.
3I've posted my answer here:
repost (for lazy ppl)
This is ugly... but it works...
I had this same problem but with multiple folders, I just wanted to flat every files out. You can use the option "transform" to pass a sed expression and... it works as expected.
this is the expression:
's/.*\///g' (delete everything before '/')
This is the final command:
tar --transform 's/.*\///g' -zcvf tarballName.tgz */*/*.info To create a tar (ARCHIVE.tar) with all files from a directory (DIR), without any parent directory information (not even ./), you can use something like:
find "DIR" -type f -printf "%f\n" | xargs tar cf ARCHIVE.tar -C "DIR" You can play with the find to limit depth, select specific files, and many other things.
Good Luck!
2I created a temp directory. And in the directory, created symbolic links to all of the files to the files to be included. Then I did tar -h -C . so that all the files (not links, but their content) are included in the archive with the desired name.
If those are the entire contents of the tarball then you can use GNU tar's --strip-components option to remove the 2 levels before the files.
Another way to temporary change directory is to put the cd and tar commands inside parenthesis ( ):
(cd example/super_user; tar -cvf ../../result.tar *) The advantage of this, is, you will always implicitly pop back to the original directory when the block is done. i.e. no need for pushd .. popd blocks or keeping track of where to cd back to.
pushd example/super_user tar -cf output.tar Output.* popd pushd pushes the current directory path to the DIR stack and moves to content folder. Then, you move back to original directory by using popd.