powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash-scripting (надо написать скрипт)
8 сообщений из 8, страница 1 из 1
bash-scripting (надо написать скрипт)
    #33719285
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Linux полное мясо, работаю с Oracle. Возникла задача написать скрипт.
Смысл в следующем: в директории есть куча файлов с расширениями bdy и spc, кол-во с bdy=кол-во с spc. Необходимо пробежаться по всем файлам в директории и запустить утилиту wrap (враппит содержание программы), параметры для запуска такие:
wrap iname={$имя_файла} oname=w_{$имя_файла} (например так, т.е. w_ добавить к названию файла).
Только вот не догнал я еще пока как все это сделать, простые циклы по числам это я писал, но вот с файлами еще не работал.
Подскажите, пожалуйста, куда копать, сильно надо. Я думаю, мне хватит простого цикла по всем файлам в директории, типа:
for [файлы в директории],
только вот надо понять, по чему for будет, и как взять имя файла, это я не догнал, торможу еще с утра...
...
Рейтинг: 0 / 0
bash-scripting (надо написать скрипт)
    #33719301
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, кажись что-то наколбасил, вроде заработало:
Код: plaintext
1.
2.
3.
4.
#!/bin/sh
for filename in $(ls /u02/wrap | awk '{print $1}'); do {
   wrap iname=$filename oname="w_"$filename;
} done
Тему можно закрывать, поторопился с открытием темы, а ведь все было так просто :)
...
Рейтинг: 0 / 0
bash-scripting (надо написать скрипт)
    #33721493
BlackStar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Буть проще
Код: plaintext
1.
2.
3.
4.
5.
#!/bin/sh

for fn in /u02/wrap/*; do
	echo iname=$fn oname="w_"`basename $fn`;
done
--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
bash-scripting (надо написать скрипт)
    #33721748
Alex Roudnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обратите внимание на команды find и xargs.

Просто примерчик:

find /xxxx/yyy/zzz -type f -name '*.arc' -mtime +1 -print | xargs gzip -f -d

В вашем случае кстати можно примерно так:

find DIRECTORY -type f -exec wrap iname='{}' oname=w_'{}' ';'

и даже скрипта писать не надо будет -:)


SeaGateВ Linux полное мясо, работаю с Oracle. Возникла задача написать скрипт.
Смысл в следующем: в директории есть куча файлов с расширениями bdy и spc, кол-во с bdy=кол-во с spc. Необходимо пробежаться по всем файлам в директории и запустить утилиту wrap (враппит содержание программы), параметры для запуска такие:
wrap iname={$имя_файла} oname=w_{$имя_файла} (например так, т.е. w_ добавить к названию файла).
Только вот не догнал я еще пока как все это сделать, простые циклы по числам это я писал, но вот с файлами еще не работал.
Подскажите, пожалуйста, куда копать, сильно надо. Я думаю, мне хватит простого цикла по всем файлам в директории, типа:
for [файлы в директории],
только вот надо понять, по чему for будет, и как взять имя файла, это я не догнал, торможу еще с утра...
...
Рейтинг: 0 / 0
bash-scripting (надо написать скрипт)
    #33721752
Alex Roudnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С файлами не налетите на грабли с длиной строки аргументов (это не в вашем примере, но все таки).

Неправильно:

gzip /opt/oracle/admin/DB/*.tpc

Правильнее (немного)

cd /opt/oracle/admin/DB/ || exit 1
for i in *.tpc
do
gzip -f $i
done
(-f потому что мог остаться файл от недоделанного прошлого раза).

Еше правильнее

find /opt/oracle/admin/DB/ -type f -name '*.tpc' -print | xargs gzip -f

Разница в том, что в первом случае формируется строка аргументов. Она имеет ограничение - 5 Кб (с небольшим хвостиком). В итоге часто выходит, что на тестах все работает, потом работает под небольшой нагрузкой, потом в какой то момент файлов становитс много, скрипт ломается - и все заклинивается пока не прибежит взмыленный админ выяснять, почему у него место кончилось.

Во втором - в конструкии for i in ограничения в ШЕЛЛЕ нету.

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

Еще обращаю внимание на мелочи типа -f - что будет если скрипт запустился, а сервер перевызвали - то есть остался недоделанный выходной файл.
...
Рейтинг: 0 / 0
bash-scripting (надо написать скрипт)
    #33721754
Alex Roudnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot BlackStar]Буть проще
Код: plaintext
1.
2.
3.
4.
5.
#!/bin/sh

for fn in /u02/wrap/*; do
	echo iname=$fn oname="w_"`basename $fn`;
done

Ваш скрипт делает правильно, но результат пишет в ТЕКУЩИЙ каталог.
Кстати, у меня там в find такая же ошибка вышла (в oname будут имена типа w_/u02/... что неверно) - лучше делать не w_файл а файл.W, и вот тогда все получается без всяких там basename.
...
Рейтинг: 0 / 0
bash-scripting (надо написать скрипт)
    #33721756
Alex Roudnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По мотивам автора:

ls никогда не делайте. Либо * либо find.

Ваш скрипт будет выглядеть так:
(суффиксы я домыслил)

cd /u02/wrap || exit 1
for f in *.bnc *.syp
do
wrap iname=$f oname=$f.W
done

ВОт это можно запускать МНОГО РАЗ, и оно не запустит рекурсивно ваш wrap.
Оно же не зависит от формата вывода ls, который никто вам вообще не гарантировал.

Ну а если нужно w_ позарез, тогда так:

#!/bin/sh
cd /u02/wrap || exit 1
mkdir -p WRAPPED
for i in *
do
test -f $i && wrap if=$i of=WRAP/w_$i
done

Так что не все так просто - я этой лапши с ls и awk поубивал уже (в дата центре, блин) просто немерянно.. Тоже кто то думал, что _все так просто_.
...
Рейтинг: 0 / 0
bash-scripting (надо написать скрипт)
    #33721917
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здорово, буду пробовать!
Про ls и awk - это да, очень вымученный вариант (все от незнания *NIX систем, т.к. на работе заставляют сидеть на винде :(), буду учить команды дальше.
Спасибо всем за внимание!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash-scripting (надо написать скрипт)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]