Распаковать множество архивов *.tar.gz (В папке больше 30 архивов. как все одним махом распаковать?)

openSUSE, SUSE Linux Enterprise

Модератор: Модераторы разделов

Stasroot1
Сообщения: 1030
ОС: Debian9

Распаковать множество архивов *.tar.gz

Сообщение Stasroot1 »

Скачал из инета кучу архивов. все лежат в одной папке. Надо распаковать все архивы одним махом в эту же папку, так чтобы: были архивы 1. 2. ,,,,, 30 а стали архивы 1. 2. ,,,,, 30 вместе с распакованными архивами разложенными по соответствующим папкам: папки: 1. 2. ,,,,, 30.

Через графическую болочку такого сделать не получается, максимум что получается это распаковать два архива одним махом. Наверняка моя проблема решаема. Прошу подсказать.
Система SUSE11.2 КДЕ4,3,1
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Распаковать множество архивов *.tar.gz

Сообщение diesel »

ls | while read i; do mkdir ${i%%.tar.gz}; tar xzf $i -C ${i%%.tar.gz}; mv $i ${i%%.tar.gz}; done
как-то так
Спасибо сказали:
Stasroot1
Сообщения: 1030
ОС: Debian9

Re: Распаковать множество архивов *.tar.gz

Сообщение Stasroot1 »

diesel писал(а):
04.01.2010 12:15
ls | while read i; do mkdir ${i%%.tar.gz}; tar xzf $i -C ${i%%.tar.gz}; mv $i ${i%%.tar.gz}; done
как-то так

много буков - пугает малость. Это набор команд? Команда? Что то обобщенное но не совсем понятное. скорее всего правильнее будет man tar... :-(
Спасибо сказали:
Аватара пользователя
Minton
Сообщения: 1588
Статус: openSUSE Localization Team
ОС: openSUSE Tumbleweed x86-64

Re: Распаковать множество архивов *.tar.gz

Сообщение Minton »

ls | #вывести список файлов
while read i; do #берём файлы по одному
mkdir ${i%%.tar.gz}; #создаём каталог, одноимённый архиву
tar xzf $i -C ${i%%.tar.gz}; #распаковываем данный архив
mv $i ${i%%.tar.gz}; #перемещаем распакованное в каталог
done #всё :)
Русский раздел на forums.opensuse.org :)

"Настоящие мужчины используют поиск" ©Goodvin
Спасибо сказали:
Аватара пользователя
Makinos
Сообщения: 369
ОС: OpenSuse 11.2

Re: Распаковать множество архивов *.tar.gz

Сообщение Makinos »

Stasroot1 писал(а):
04.01.2010 14:20
много буков - пугает малость. Это набор команд? Команда? Что то обобщенное но не совсем понятное.


"многабукафф ниасилил"
жесть.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Распаковать множество архивов *.tar.gz

Сообщение diesel »

Minton писал(а):
04.01.2010 16:00
ls | #вывести список файлов
while read i; do #берём файлы по одному
mkdir ${i%%.tar.gz}; #создаём каталог, одноимённый архиву не совсем. создаем каталог такой же как архив, только без .tar.gz, если например архив был archive.tar.gz, то получим каталог archive
tar xzf $i -C ${i%%.tar.gz}; #распаковываем данный архив в только что созданный каталог
mv $i ${i%%.tar.gz}; #перемещаем распакованное архив в каталог
done #всё :)

fixed

чтобы посмотреть что происходит на самом деле, вы можете пред каждой командой в цикле поставить echo:

Код: Выделить всё

ls | while read i; do echo mkdir ${i%%.tar.gz}; echo tar xzf $i -C ${i%%.tar.gz}; echo mv $i ${i%%.tar.gz}; done

(потом, если команды делают то что требуется, и в именах архивов нет пробелов, просто можно сделать pipe в shell:

Код: Выделить всё

ls | while read i; do echo mkdir ${i%%.tar.gz}; echo tar xzf $i -C ${i%%.tar.gz}; echo mv $i ${i%%.tar.gz}; done | sh

)
Спасибо сказали:
Аватара пользователя
Minton
Сообщения: 1588
Статус: openSUSE Localization Team
ОС: openSUSE Tumbleweed x86-64

Re: Распаковать множество архивов *.tar.gz

Сообщение Minton »

Собственно, именно это я и имел в виду во всех случаях, кроме последнего :)
Русский раздел на forums.opensuse.org :)

"Настоящие мужчины используют поиск" ©Goodvin
Спасибо сказали:
Stasroot1
Сообщения: 1030
ОС: Debian9

Re: Распаковать множество архивов *.tar.gz

Сообщение Stasroot1 »

Makinos писал(а):
04.01.2010 18:42
Stasroot1 писал(а):
04.01.2010 14:20
много буков - пугает малость. Это набор команд? Команда? Что то обобщенное но не совсем понятное.


"многабукафф ниасилил"
жесть.


Придираешся к Русскому языку в моем исполнении??? Нет чтобы по делу написать что нибудь. а про то что много буковок, ну так как было так и написал.

Остальным спасибо за разъяснения!

Команда:

Код: Выделить всё

ls | while read i; do echo mkdir ${i%%.tar.gz}; echo tar xzf $i -C ${i%%.tar.gz}; echo mv $i ${i%%.tar.gz}; done | sh
делает практически почти так как нужно. Было в папке: "архив.tar.gz"
Стало в папке "папка "архив"" а в папке "папка "архив"" лежит сам "архив.tar.gz" простите за каламбур. а надо чтобы стало так:
НАДО: в папке: файл: "архив.tar.gz" и папка: "папка "архив"".

Хотя и тот вариант что вы мне уже разжевали тоже очень даже не плох! И самое главное выполняется на кучу порядков быстрее чем если все ручками разархивировать по одному/два через графический интерфейс! Еще рас спасибо! И... может это в общий FAQ? Я так понимаю универсальная для всех Линуксов команда.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Распаковать множество архивов *.tar.gz

Сообщение SLEDopit »

Stasroot1 писал(а):
05.01.2010 09:05
И... может это в общий FAQ?
слишком специфический вопрос. я сколько пользуюсь компьютером, мне такая конструкция ни разу не пригодилась.
и после нелубокого изучения bash scripting'a такая строка пишется за полминуты.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Makinos
Сообщения: 369
ОС: OpenSuse 11.2

Re: Распаковать множество архивов *.tar.gz

Сообщение Makinos »

да, это был офтоп, Stasroot1
но не к русскому языку- я про незнание bash: это очень грустно.
Спасибо сказали:
Stasroot1
Сообщения: 1030
ОС: Debian9

Re: Распаковать множество архивов *.tar.gz

Сообщение Stasroot1 »

Makinos писал(а):
05.01.2010 16:14
да, это был офтоп, Stasroot1
но не к русскому языку- я про незнание bash: это очень грустно.

Я постараюсь исправиться. просто времени мало, основная деятельность у меня - спорт... а я тут иногда до ночи засиживаюсь с компом.... тоже не хорошо. а по скриптингу в консоли потихоньку начал читать приведенные выше ссылки. :-)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Распаковать множество архивов *.tar.gz

Сообщение drBatty »

Stasroot1 писал(а):
05.01.2010 09:05
И... может это в общий FAQ? Я так понимаю универсальная для всех Линуксов команда.

да, но можно и по другому, через find -exec. я-бы так и сделал.
а в FAQ ИМХО не надо, кто не знает bash - это не поможет, а кто знает - и сам напишет. может не за 30 секунд, за час (если видит Linux впервые), но напишет.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: