Составляем скрипт (разнообразные вопросы по утилитам)

Готовые решения для многих вопросов, которые очень часто задаются снова и снова.

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

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Составляем скрипт

Сообщение t.t » 25.10.2005 03:22

Пока ничего не вышло.
Подробнее, пожалуйста. Что говорит на первую из приведенных команд? (Хотя лучше *.zip, конечно.)
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

Аватара пользователя
@leX
Сообщения: 313
ОС: Linux

Re: Составляем скрипт

Сообщение @leX » 25.10.2005 03:27

t.t писал(а):
25.10.2005 03:22
Пока ничего не вышло.
Подробнее, пожалуйста. Что говорит на первую из приведенных команд? (Хотя лучше *.zip, конечно.)

[...tmp]$ unzip ../download/*zip
Archive: ../download/0.4.8a_modpack.zip
caution: filename not matched: ../download/012Goldenlines.zip
caution: filename not matched: ../download/EX951F.zip
caution: filename not matched: ../download/John_Wiley_And_Sons_501_Web_Site_Secrets_Feb_2004.zip
caution: filename not matched: ../download/LeoDocs-4.3-a4.zip
caution: filename not matched: ../download/PassReminder-GTK-0.5.zip
caution: filename not matched: ../download/PassReminder-src-0.5.zip
caution: filename not matched: ../download/PassReminder_GTK-0.6.1.zip
.....
Спасибо сказали:

Аватара пользователя
Bolverk
Бывший модератор
Сообщения: 1571
ОС: Cygwin

Re: Составляем скрипт

Сообщение Bolverk » 25.10.2005 03:53

по простому:
ls *.zip | xargs unzip
Спасибо сказали:

Аватара пользователя
@leX
Сообщения: 313
ОС: Linux

Re: Составляем скрипт

Сообщение @leX » 25.10.2005 04:00

Bolverk писал(а):
25.10.2005 03:53
по простому:
ls *.zip | xargs unzip

$ ls *.zip | xargs unzip
Archive: vl_01.zip
caution: filename not matched: vl_02.zip
caution: filename not matched: vl_03.zip
caution: filename not matched: vl_04.zip
caution: filename not matched: vl_05.zip
caution: filename not matched: vl_06.zip
caution: filename not matched: vl_07.zip
caution: filename not matched: vl_08.zip
caution: filename not matched: vl_09.zip
caution: filename not matched: vl_10.zip
caution: filename not matched: vl_11.zip
....
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Составляем скрипт

Сообщение t.t » 25.10.2005 04:14

А если по одному распаковывать, то нормально?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

Аватара пользователя
StraNNicK
Бывший модератор
Сообщения: 1005
Статус: добрый хиппи

Re: Составляем скрипт

Сообщение StraNNicK » 25.10.2005 05:04

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

for i in `ls -1`; do unzip `echo $i`; done;
Ушёл навсегда. В личку не заглядываю.
Спасибо сказали:

Аватара пользователя
alv
Бывший модератор
Сообщения: 7268
Статус: Пенсионер в законе
ОС: Cintu

Re: Составляем скрипт

Сообщение alv » 25.10.2005 09:39

StraNNicK писал(а):
25.10.2005 05:04

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

for i in `ls -1`; do unzip `echo $i`; done;


или так, или
find path -name \.zip -exec unzip {} \;
или
find path -name \.zip | xargs unzip

ls - не фильтр, и потому не работает, по каналу от нее передается текстовый список файлов, а не имена файлов как аргументы следующей команды
Спасибо сказали:

Аватара пользователя
StraNNicK
Бывший модератор
Сообщения: 1005
Статус: добрый хиппи

Re: Составляем скрипт

Сообщение StraNNicK » 25.10.2005 11:46

:) Действительно, find проще... Не подумал.
Ушёл навсегда. В личку не заглядываю.
Спасибо сказали:

Аватара пользователя
@leX
Сообщения: 313
ОС: Linux

Re: Составляем скрипт

Сообщение @leX » 25.10.2005 15:13

Очень сожалею но

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

find ./ -name \.zip -exec unzip {} \;
ничего не делает и ничего не выводит в консоль (зипы в каррент директории), а

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

find ./ -name \.zip | xargs unzip
выводит хелп от unzip.

А вот

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

for i in `ls -1 *zip`; do unzip `echo $i`; done;
работает.
Молодец StraNNicK
Спасибо сказали:

Аватара пользователя
xorader
Сообщения: 1030
Статус: собирающий миры
ОС: Debian

Re: Составляем скрипт

Сообщение xorader » 25.10.2005 16:00

> Молодец StraNNicK

:megalol: :megalol: :megalol: :megalol: :new_megalol: :new_megalol: :new_megalol: :lol: :lol: :lol:

ах да... привлекло название темы - смеялся :)
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Составляем скрипт

Сообщение t.t » 25.10.2005 16:42

find path -name \.zip -exec unzip {} \;
Не совсем так:
find path -name "*.zip" -exec unzip {} \;
Или лучше даже так:
find path -iname "*.zip" -exec unzip {} \;
Но это всё же не совсем то, что вариант Странника, т.к. имелись ввиду всё же zip-файлы в текущем каталоге, а не во всех подкаталогах.

Второй же вариант (с xargs) не сработает вообще, т.к. там опять же получится "unzip file1 file2 ...".

P.S. Вот что бывает, когда программа нестандартно обрабатывает аргументы командной строки...
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

Danil
Сообщения: 10

Re: Составляем скрипт

Сообщение Danil » 23.11.2005 07:06

В общем возникла такая проблема, не могу очистить директории, в которых расплодилось большое количество файлов.
если дать команду rm * внутри, то выдаст что-то типа

www# rm *
/bin/rm: Argument list too long.

если дать команду на удаление дирректории, то либо скажет

www# rm -r tmp/
rm: fts_read: Cannot allocate memory

либо вроде как начнет удалять.. но процесс этот чрезвычайно медленный, и за час ожидания мне не удалось получить хоть какой-то результат.

В общем что можно поделать в этой ситуации?
Спасибо сказали:

allez
Сообщения: 2221
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Составляем скрипт

Сообщение allez » 23.11.2005 07:46

Вот вам навскидку пара вариантов:

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

cd tmp/; ls -a | grep -v ^.$ | grep -v ^..$ > ~/filelist; while read i; do rm -vf $i; done < ~/filelist; rm ~/filelist

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

find tmp/ -type f -exec rm -vf {} \;
Спасибо сказали:

Danil
Сообщения: 10

Re: Составляем скрипт

Сообщение Danil » 23.11.2005 08:06

Спс, я попробую.. но второй в общем тоже выдает cannot allocate memory
А первый.. что ж .. в процессе

У меня в связи с этим такой еще вопрос появился.. Ведь по идее директория содежрит инфу о файлах, которые в ней лежат. Т.е если ее убить, то все файлы умрут автоматически, без всяких там проверок и прочего. можно такое как-нибудь реализовать?
Спасибо сказали:

allez
Сообщения: 2221
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Составляем скрипт

Сообщение allez » 23.11.2005 08:45

Можно, но не нужно, ибо слишком опасно.

P.S. По поводу "cannot allocate memory": сколько модулей памяти у вас и каков их объем, кто их производитель (производители)? Сдается мне, что надо бы вам погонять memtest на своей машине...
Спасибо сказали:

Аватара пользователя
Bolverk
Бывший модератор
Сообщения: 1571
ОС: Cygwin

Re: Составляем скрипт

Сообщение Bolverk » 23.11.2005 11:44

find -delete
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Составляем скрипт

Сообщение t.t » 23.11.2005 11:45

cd tmp/; ls -a | grep -v ^.$ | grep -v ^..$ > ~/filelist; while read i; do rm -vf $i; done < ~/filelist; rm ~/filelist

ls -a | grep -v ^.$ | grep -v ^..$ -- это ведь то же самое, что и ls -A или я что-то путаю? И ls -A | while read тоже, по-моему, можно сказать.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

allez
Сообщения: 2221
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Составляем скрипт

Сообщение allez » 23.11.2005 12:52

Насчет ls -A вы ничего не путаете, это меня память подвела :) - крайне редко пользуюсь этой опцией (да практически и не пользуюсь), вот и забываю о ее существовании, а покопаться в man ls, каюсь, поленился. И со вторым замечанием согласен - писал, что называется, "быстро и грязно", а в таких случаях у меня, бывает, случаются рецидивы чайничества, когда чешешь правое ухо левой рукой через голову (и хорошо еще, что через голову, а не через что-нибудь другое :)).
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Составляем скрипт

Сообщение t.t » 23.11.2005 13:52

Насчет ls -A вы ничего не путаете, это меня память подвела - крайне редко пользуюсь этой опцией (да практически и не пользуюсь), вот и забываю о ее существовании, а покопаться в man ls, каюсь, поленился. И со вторым замечанием согласен - писал, что называется, "быстро и грязно", а в таких случаях у меня, бывает, случаются рецидивы чайничества, когда чешешь правое ухо левой рукой через голову (и хорошо еще, что через голову, а не через что-нибудь другое ).
Ну, это понятно :) Я ведь не в качестве замечания, а для красоты.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

atap
Сообщения: 28

Re: Составляем скрипт

Сообщение atap » 15.12.2005 15:24

как сделать исполняемый файл, как bat в виндах? какое расширение должно быть? куда его положить чтобы отовсюду можно было его запускать? как запускать (как команду, или ./xxx или yyy xxx или еще как)?
Спасибо сказали:

Аватара пользователя
Bolverk
Бывший модератор
Сообщения: 1571
ОС: Cygwin

Re: Составляем скрипт

Сообщение Bolverk » 15.12.2005 15:29

1) написать
2) пофиг, обычно никакого, если хочешь - можешь поставить sh (shell script)
3) Если всем, то лучше в /usr/local/bin, только себе - ~/bin/
4) Если 3, то можно просто, в противном случае - с путем (абсолютным или относительным), из текущей директории: ./<имя файла>
Для работы нужно поставить атрибут "исполняемый": chmod +x <имя файла>
Спасибо сказали:

atap
Сообщения: 28

Re: Составляем скрипт

Сообщение atap » 15.12.2005 15:33

спасибо, временно решу эту проблему
Спасибо сказали:

Аватара пользователя
bobrik
Сообщения: 183

Re: Составляем скрипт

Сообщение bobrik » 18.12.2005 16:05

Начать надо с #/bin/bash :lol:
Спасибо сказали:

neuralNetwork
Сообщения: 119
ОС: Debian Squeeze

Re: Составляем скрипт

Сообщение neuralNetwork » 18.12.2005 16:11

bobrik писал(а):
18.12.2005 16:05
Начать надо с #/bin/bash :lol:
Точнее с #!/bin/bash :lol:
Спасибо сказали:

laser
Сообщения: 7

Re: Составляем скрипт

Сообщение laser » 12.01.2006 19:12

Всем привет!

Есть текстовый файл (допустим какой-нибудь log)
с огромным количеством строк

Подскажите, как удалить все строки, содержащие
2 или 3 известные комбинации символов.
И еще - как поменять времена создания, доступа и
модификации файла.
При этом использовать штатные стредства, т.е. из командной строки bash, в mc или в vi.

Заранее благодарен всем.
Спасибо сказали:

Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Составляем скрипт

Сообщение madskull » 12.01.2006 19:41

sed

grep
ArchLinux / IceWM
Спасибо сказали:

Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Составляем скрипт

Сообщение sash-kan » 12.01.2006 19:49

> И еще - как поменять времена создания, доступа и модификации файла.

touch
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:

laser
Сообщения: 7

Re: Составляем скрипт

Сообщение laser » 12.01.2006 19:54

madskull, grep-ом я вижу все строки, а как сделать, чтоб они удалились
из файла?
Можно полный синтаксис строки?
Вопрос все-таки в разделе для чайников :)))

sash-kan
а touch у меня выставляет текущее время, а не то, что я хочу
Спасибо сказали:

laser
Сообщения: 7

Re: Составляем скрипт

Сообщение laser » 12.01.2006 20:29

Спасибо с touch разобрался
Спасибо сказали:

Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Составляем скрипт

Сообщение sash-kan » 12.01.2006 20:38

> а как сделать, чтоб они удалились из файла?
1. запихнуть вывод в другой файл. удалить, переименовать.
2. воспользоваться sed-овской опцией -i (sed -i ...)
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: