powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / скрипт на bash
11 сообщений из 11, страница 1 из 1
скрипт на bash
    #33405607
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нужно написать такою штуку на bash
есть у меня папка bases которой есть папки с названием оракловских юзеров. В те папки будут забрасиваться архиви БД.
Скрипт будет запускатся скажем раз в час и должен просмотреть все папки если там есть rar то раскрутить его и втянуть в БД где touser = навании папки в которой сидит архив.
Как на bash написать просмотр всех папок? На примере плиз
...
Рейтинг: 0 / 0
скрипт на bash
    #33405662
Фотография Adekamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
find / -name "*rar" etc.
...
Рейтинг: 0 / 0
скрипт на bash
    #33405666
Фотография Adekamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точнее find / -name "*rar" -type f
...
Рейтинг: 0 / 0
скрипт на bash
    #33405682
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
gosha@b127:/tmp> cat  1 .sh
FIND_DIR='/tmp/u'

ls -lR $FIND_DIR

find $FIND_DIR  -type f -name '*.rar' |
        while read file_name
        do
                path=`dirname $file_name`
                user_name=`basename $path`

                echo "File name: $file_name"
                echo "File path: $path"
                echo "User name: $user_name"
        done

gosha@b127:/tmp> bash  1 .sh
/tmp/u:
итого  12 
drwxr-xr-x   2  gosha users  4096   2005 - 11 - 29   13 : 07  gosha
drwxr-xr-x   2  gosha users  4096   2005 - 11 - 29   13 : 07  ira
drwxr-xr-x   2  gosha users  4096   2005 - 11 - 29   13 : 07  vasya

/tmp/u/gosha:
итого  0 
-rw-r--r--  1 gosha users 0 2005-11-29 13:07 1.rar

/tmp/u/ira:
итого  0 

/tmp/u/vasya:
итого  0 
File name: /tmp/u/gosha/ 1 .rar
File path: /tmp/u/gosha
User name: gosha
...
Рейтинг: 0 / 0
скрипт на bash
    #33407806
no-dashi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cd /basedir
for username in * ; do
cd $username
for f in *.rar ; do
unrar x $f
imp ... touser=($username)
done
cd ..
done
...
Рейтинг: 0 / 0
скрипт на bash
    #33407955
nik2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no-dashicd /basedir
for username in * ; do
...
done

...после чего долго плеваться на `чудаков` которые имеют в иенах файлов\директорий пробелы... хотя и с не контролируемой рекурсией, чуть выше, в find'e тоже не все так чоколадно...
...
Рейтинг: 0 / 0
скрипт на bash
    #33408291
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik2 no-dashicd /basedir
for username in * ; do
...
done

...после чего долго плеваться на `чудаков` которые имеют в иенах файлов\директорий пробелы... хотя и с не контролируемой рекурсией, чуть выше, в find'e тоже не все так чоколадно...

Это в честь чего?

$ mkdir test
$ cd test
$ mkdir 'a b'
$ mkdir 'c d b'
$ for i in *
> do
> echo $i
> done
a b
c d b
$
...
Рейтинг: 0 / 0
скрипт на bash
    #33408313
nik2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хрен
...сори, х..ню сказал не проверив.
...
Рейтинг: 0 / 0
скрипт на bash
    #33408400
no-dashi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nik2 no-dashicd /basedir
for username in * ; do
...
done

...после чего долго плеваться на `чудаков` которые имеют в иенах файлов\директорий пробелы...

нНу тогда и фиг с ними :-) Хотя в задании говорилось, что имена каталогов совпадают с именами юзеров, хотя конечно юзера с пробелом в логине на оракле тоже можно завести... Но ТОГДА они ССЗБ :-)
...
Рейтинг: 0 / 0
скрипт на bash
    #33410594
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче сделал я так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#!/bin/bash
FIND_DIR='/ora_rbs/bases'
ls -lR $FIND_DIR
find $FIND_DIR  -type f -name '*.rar' |
        while read file_name
        do
            path=`dirname $file_name`
            user_name=`basename $path`
            rar x -y $file_name $path
            echo $file_name|awk 'gsub(".rar",".dmp") {print $0}'|while read dmp;
 do
#           echo $s|awk 'gsub(".rar",".dmp") {print $0}'|while read dmp; do
            sqlplus system/solaris@OEDB @drop_shema.sql $user_name
            sqlplus system/solaris@OEDB @drop_shema.sql $user_name
            imp system/solaris@OEDB file=$dmp fromuser=prm touser=$user_name
            rm $file_name
            done
        done
Всё класно работает. Только один подводний камень
Я хочу ставить ету штуку в cron.hourly
Если у меня будет несколько баз для втягивания или одна большая - то за
час скрипт может не управится а вто время стартанёт ещё раз и может ерунда получится.
Как ету ситуацию обойти?
...
Рейтинг: 0 / 0
скрипт на bash
    #33410801
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
touch .lock
lock=`cat .lock`
if [ "x$lock" != 'x' ]; then
    #
    # жив ли тот процесс который в том локе описан
    #
    SELF= 0 
    ps -p $lock -o cmd | grep $ 0  &> /dev/null && SELF= 1 
    if [ $SELF -eq  1  ]; then
        echo "типа я уже работаю..."
        exit
    fi
fi
echo $$ > .lock
#
#....
#
rm -f .lock
тока оно как то не совсем атомарно получается... Хотя вот если надо не каждый час запускать а 1)запустить-2)отработать-3)подождать_час-1)-2)-3)... то можно наверно atd вместо крона заюзать добавив в тот скрипт в конец постановку самого себя в очередь atd через час...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / скрипт на bash
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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