5

I'm trying to modify a certain tar.gz archive I have. When I go to create the tar, it retains the parent directory structure, as a tarball should. However, is there a way to simply create a tar archive with just the files I specifiy, rather than the entire directory tree?

Blake
  • 77
  • 1
  • 7
  • Would you accept a way to remove directories on extraction instead of creation? As @yarek answered, finding and piping the files shows that tar doesn't support this. – Mike Fiedler May 07 '12 at 12:27
  • Well, some variants of *tar* do - see below. – yrk May 11 '12 at 20:13

3 Answers3

3

Disabling recursion in tar.

POSIX pax(1) has -d option which enables cpio-like interface while allowing to create .tar files. Example from Wikipedia:

find . -depth -print | pax -wd > archive.tar

GNU tar(1) has an analogous option, --no-recursion. Example from there:

find dir tests | tar -cf archive -T - --no-recursion

P.S. I usually fall back to cpio(1) in such cases.

yrk
  • 2,487
  • 17
  • 22
1

It's a little dirty, but yes:

michael@choad:~$ tar cf - -C ~/scratch packing_slip_411.pdf -C ~/bin/df_linux/ README.linux | tar tvf -
-rw-r--r-- michael/users 37686 2012-03-30 15:09 packing_slip_411.pdf
-rwx------ michael/users  1364 2012-03-30 07:27 README.linux
MikeyB
  • 39,291
  • 10
  • 105
  • 189
-1

Specifying the full path of a file will preserve the tree:

tar cf newarchive.tar /path/to/file1 /path/to/file2

To omit the file structure, cd to the directory and create the archive:

(cd /path/to && tar cf /tmp/newarchive.tar file1 file2)
r_2
  • 335
  • 3
  • 9