Как распаковать все .tar.gz с помощью shell-скрипта? - PullRequest
13 голосов
/ 24 ноября 2010

Я пробовал это:

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

Если в папке есть один tar, он работает. Если в папке много смол, я получаю сообщение об ошибке.

Как я могу это сделать?

У меня есть идея запустить цикл в Untar, но я не знаю, как решить эту проблему

Ответы [ 4 ]

25 голосов
/ 24 ноября 2010
for f in *.tar.gz
do
  tar zxvf "$f" -C /path/tar
done
12 голосов
/ 24 ноября 2010

Я считаю синтаксис find exec очень полезным:

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

{} заменяется на каждый найденный файл и выполняется строка.

3 голосов
/ 24 ноября 2010
for a in /path/tar/*.gz
do
    tar -xzvf "$a" -C /path/tar
done

Примечания

  • Это предполагает, что файлы, заканчивающиеся на .gz, являются сжатыми tar-файлами.Обычно .tgz или .tar.gz используется для обозначения этого, однако tar не удастся, если что-то не так.
  • Сначала вам может быть проще cd /path/tar, затемвы можете удалить -C /path/tar из команды untar и /path/tar/ в цикле.
0 голосов
/ 24 мая 2018

Принятый ответ сработал у меня с небольшой модификацией

for f in *.tar.gz
do
  tar zxvf "$f" -C \name_of_destination_folder_inside_current_path
done

Мне пришлось изменить косую черту на обратную, и тогда это сработало для меня.

...