0

I have a tarball called playground.tar with the following file:

test.txt

When I extract everything there is no problem but when I try and extract a single file it throws the following error when I run this command:

 tar xf playground.tar test.txt

tar: test.txt: Not found in archive

tar: Exiting with failure status due to previous errors

What gives I have also tried it with the path enclosed in quotes. The file definitely exists.

EDIT

The tarball was created with this command:

tar cf playground.tar playground

5
  • 1
    Update the question with the exact command you have used to create the archive.
    – thanasisp
    Dec 13, 2020 at 11:06
  • 1
    It probably doesn't have test.txt exactly stored as that. It might be ./test.txt or some/path/to/test.txt Dec 13, 2020 at 11:12
  • 1
    So you want to extract playground/test.txt not test.txt
    – thanasisp
    Dec 13, 2020 at 11:18
  • 1
    You can also use the TAB completion into the interactive shell. Type tar xf playground.tar <TAB> and it's like being into the directory tree. You can select the file you want.
    – thanasisp
    Dec 13, 2020 at 11:19
  • Yea I figured it out the name of the tarball has to be in the relative path even though this is not done in the linux command line book I am following. Figures, thanks for the help
    – nrmad
    Dec 13, 2020 at 11:21

2 Answers 2

2

You need to specify the whole path:

tar -xf playground.tar playground/test.txt

You can use tar --list or tar -t to list the contents of an archive to see what's in there:

$ tar -tf playground.tar
playground/
playground/text.txt

Here's a complete log of what I did to reproduce your issue:

$ cd $(mktemp -d)                              # Go to a new empty directory
$ mkdir playground
$ touch playground/test.txt                    # Make the file we will tar

$ tar cf playground.tar playground             # Make the tar
$ tar -tf playground.tar                       # List the contents of a tar
playground/
playground/test.txt                            # There's our file! It has a full path

$ rm -r playground                             # Let's delete the source so we can test extraction
$ tar -xf playground.tar playground/test.txt   # Extract that file
$ find .                                       # Check if the file is now there
.
./playground.tar
./playground
./playground/text.txt                          # Here it is!

Alternatively, you didn't need to pack the whole directory. This would have also worked. I also added test2.txt to show the whole directory isn't unpacked.

$ cd $(mktemp -d)                 # New directory
$ touch test.txt test2.txt        # Let's make a few files
$ tar -cf playground.tar *.txt    # Pack everything
$ tar -tf playground.tar          # What's in the archive?
test2.txt
test.txt                          # Look: No directory!
$ rm *.txt                        # Clear the source files to test unpacking
$ tar -xf playground.tar test.txt # Unpack one file (no directory name)
$ find .
.
./test.txt
./playground.tar                  # There it is!
0

The tarball name must be included in the file paths:

tar xf playground.tar playground/test.txt

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .