11

There are many folders in my current directory. Each folder has a tar.gz file. To extract the tar.gz file I need to be inside each folder and run the following command every time.

tar xvzf tar.gz -C /path/to/targetdirectory

Inside my current directory it looks like below:

   current directory
            ├──Folder1
                ├── A.tar.gz
            ├──Folder2
                ├── B.tar.gz
            ├──Folder3
                ├── C.tar.gz
            ├──Folder4
                ├── D.tar.gz
            ├──Folder5
                ├── E.tar.gz

To extract all at a time I tried like this

tar xvzf */*.tar.gz -C /path/to/targetdirectory

This gave me an error:

tar: Folder1/A.tar.gz: Not found in archive
tar: Folder2/B.tar.gz: Not found in archive
tar: Folder3/C.tar.gz: Not found in archive
tar: Folder4/D.tar.gz: Not found in archive
tar: Folder5/E.tar.gz: Not found in archive

1 Answer 1

15

Use find and execute a command on each found file, in the directory of that file:

find . -name '*.tar.gz' -execdir tar -xzvf '{}' \;

The -execdir option executes tar from within the folder of the found file, and {} will be replaced by the tarfile's name.

See the find documentation for more info.

6
  • Where should I give target directory in the command?
    – beginner
    Mar 27, 2018 at 13:27
  • 1
    Ok. Gave like this to get the extracted files into target directory. find . -name '*.tar.gz' -execdir tar -C /path/to/targetdirectory -xzvf '{}' \; This worked
    – beginner
    Mar 27, 2018 at 14:20
  • Yep, you can specify the commands as usual within the -exec option.
    – slhck
    Mar 27, 2018 at 14:30
  • hi...I have small doubt. Is there a way to give path to those...*.tar.gz files?
    – beginner
    Apr 12, 2018 at 15:16
  • You can find in another directory by replacing find . with find /path/to/directory.
    – slhck
    Apr 13, 2018 at 7:02

You must log in to answer this question.

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