Скачал из инета кучу архивов. все лежат в одной папке. Надо распаковать все архивы одним махом в эту же папку, так чтобы: были архивы 1. 2. ,,,,, 30 а стали архивы 1. 2. ,,,,, 30 вместе с распакованными архивами разложенными по соответствующим папкам: папки: 1. 2. ,,,,, 30.
Через графическую болочку такого сделать не получается, максимум что получается это распаковать два архива одним махом. Наверняка моя проблема решаема. Прошу подсказать.
Система SUSE11.2 КДЕ4,3,1
Распаковать множество архивов *.tar.gz (В папке больше 30 архивов. как все одним махом распаковать?)
Модератор: Модераторы разделов
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Распаковать множество архивов *.tar.gz
ls | while read i; do mkdir ${i%%.tar.gz}; tar xzf $i -C ${i%%.tar.gz}; mv $i ${i%%.tar.gz}; done
как-то так
как-то так
-
- Сообщения: 1030
- ОС: Debian9
-
- Сообщения: 1588
- Статус: openSUSE Localization Team
- ОС: openSUSE Tumbleweed x86-64
Re: Распаковать множество архивов *.tar.gz
ls | #вывести список файлов
while read i; do #берём файлы по одному
mkdir ${i%%.tar.gz}; #создаём каталог, одноимённый архиву
tar xzf $i -C ${i%%.tar.gz}; #распаковываем данный архив
mv $i ${i%%.tar.gz}; #перемещаем распакованное в каталог
done #всё :)
while read i; do #берём файлы по одному
mkdir ${i%%.tar.gz}; #создаём каталог, одноимённый архиву
tar xzf $i -C ${i%%.tar.gz}; #распаковываем данный архив
mv $i ${i%%.tar.gz}; #перемещаем распакованное в каталог
done #всё :)
Спасибо сказали:
-
- Сообщения: 369
- ОС: OpenSuse 11.2
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Распаковать множество архивов *.tar.gz
Minton писал(а): ↑04.01.2010 16:00ls | #вывести список файлов
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
)
-
- Сообщения: 1588
- Статус: openSUSE Localization Team
- ОС: openSUSE Tumbleweed x86-64
Re: Распаковать множество архивов *.tar.gz
Собственно, именно это я и имел в виду во всех случаях, кроме последнего :)
-
- Сообщения: 1030
- ОС: Debian9
Re: Распаковать множество архивов *.tar.gz
Придираешся к Русскому языку в моем исполнении??? Нет чтобы по делу написать что нибудь. а про то что много буковок, ну так как было так и написал.
Остальным спасибо за разъяснения!
Команда:
Код: Выделить всё
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" и папка: "папка "архив"".
Хотя и тот вариант что вы мне уже разжевали тоже очень даже не плох! И самое главное выполняется на кучу порядков быстрее чем если все ручками разархивировать по одному/два через графический интерфейс! Еще рас спасибо! И... может это в общий FAQ? Я так понимаю универсальная для всех Линуксов команда.
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Распаковать множество архивов *.tar.gz
слишком специфический вопрос. я сколько пользуюсь компьютером, мне такая конструкция ни разу не пригодилась.
и после нелубокого изучения 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.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 369
- ОС: OpenSuse 11.2
Re: Распаковать множество архивов *.tar.gz
да, это был офтоп, Stasroot1
но не к русскому языку- я про незнание bash: это очень грустно.
но не к русскому языку- я про незнание bash: это очень грустно.
-
- Сообщения: 1030
- ОС: Debian9
Re: Распаковать множество архивов *.tar.gz
Я постараюсь исправиться. просто времени мало, основная деятельность у меня - спорт... а я тут иногда до ночи засиживаюсь с компом.... тоже не хорошо. а по скриптингу в консоли потихоньку начал читать приведенные выше ссылки. :-)
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Распаковать множество архивов *.tar.gz
да, но можно и по другому, через find -exec. я-бы так и сделал.
а в FAQ ИМХО не надо, кто не знает bash - это не поможет, а кто знает - и сам напишет. может не за 30 секунд, за час (если видит Linux впервые), но напишет.