Reputation: 541
I tried this:
DIR=/path/tar/*.gz
if [ "$(ls -A $DIR 2> /dev/null)" == "" ]; then
echo "not gz"
else
tar -zxvf /path/tar/*.gz -C /path/tar
fi
If the folder has one tar, it works. If the folder has many tar, I get an error.
How can I do this?
I have an idea to run a loop to untar, but I don't know how to solve this problem
Upvotes: 13
Views: 34228
Reputation: 67
The accepted answer worked for me with a slight modification
for f in *.tar.gz
do
tar zxvf "$f" -C \name_of_destination_folder_inside_current_path
done
I had to change the forward slash to a backslash and then it worked for me.
Upvotes: 0
Reputation: 7212
I find the find
exec syntax very useful:
find . -name '*.tar.gz' -exec tar -xzvf {} \;
{}
gets replaced with each file found and the line is executed.
Upvotes: 14
Reputation: 118530
for a in /path/tar/*.gz
do
tar -xzvf "$a" -C /path/tar
done
.gz
are gzipped tar files. Usually .tgz
or .tar.gz
is used to signify this, however tar
will fail if something is not right.cd /path/tar
first, then you can drop the -C /path/tar
from the untar command, and the /path/tar/
in the loop.Upvotes: 3
Reputation: 798676
for f in *.tar.gz
do
tar zxvf "$f" -C /path/tar
done
Upvotes: 27