Нужен "скелет" скрипта на любом скриптовом языке1)есть шара на одном компе сетки(допустим с адресом 163.131.10.1/shara1) и шара на другом компе в сетке 163.131.10.2/shara2)...шары смонтированы на линуксовая машину с адресом 163.131.10.3
2)в shara1 хранятся каталоги(папки),которые именуются сл образом хх-ххххх-хх, где х-символ или цифра. Каждый из этих овкатолог имеет подкаталоги,которые именуются сл образом yy_yy_yyyy, где y-символ или число.
3)задача скрипта скопировать содержание каталогов xx-xxxxx-xx в shara2 таким образом, чтобы во-первых,иерархия каталогов сохранилась, а во-вторых, вместо хх-ххххх-хх создать допустим каталог 18-ххххх-хх, т.е. в наименовании каталогов изменить 2 символа и туда все содержимое скопировать.Например, если есть у нас в каталоге shara1 есть к3-loggo-1g подкаталоги 8с_658hy_13kk и 6р_hgl13_y1. Данные подкаталоги имеют ряд файлов в первом:1.log, 2.log. второй: 44.log, 12.log.
Запускаем скрипт:
создаёт список каталогов...
далее работает по каждому найденному в шаре1 каталогу...
доходим до каталога к3-loggo-1g
создаётся в шаре2 каталог 18-loggo-1g.
создаются соответсвенно подкаталоги с именами 8с_658hy_13kk и 6р_hgl13_y1.
в подкаталог 8с_658hy_13kk копируются файлы 1.log, 2.log. в подкаталог 6р_hgl13_y1 копируются файлы 44.log, 12.log.и так по каждому найденному каталогу...
вот примерно так как-то....
Буду рад за любую полезную информацию как создать скрипт именно данный скрипт...буду рад за пример!
> Запускаем скрипт:man bash
> создаёт список каталогов...
man mkdir
> далее работает по каждому найденному в шаре1 каталогу...
man find
> доходим до каталога к3-loggo-1g
man cd
> создаётся в шаре2 каталог 18-loggo-1g.
man mkdir
> создаются соответсвенно подкаталоги с именами 8с_658hy_13kk и 6р_hgl13_y1.mkdir -p
> в подкаталог 8с_658hy_13kk копируются файлы 1.log, 2.log. в подкаталог 6р_hgl13_y1 копируются
> файлы 44.log, 12.log.man cp
> и так по каждому найденному каталогу...
for i in ....
команды фундаментальные-то я линуха знаю))
просто не знаю как их в чистом виде можно использовать в скриптах...
опыт скриптонаписания очень мал((
> просто не знаю как их в чистом виде можно использовать в скриптах...Всё очень просто:
Одна команда - одна строка!
Строка может состоять из команд!
Команда может состоять из строк!:)
http://rus-linux.net/MyLDP/BOOKS/abs-guide/flat/abs-book.htm...
http://rus-linux.net/MyLDP/BOOKS/abs-guide/flat/abs-book.html
http://tldp.org/LDP/abs/html/
>> просто не знаю как их в чистом виде можно использовать в скриптах...
> Всё очень просто:
> Одна команда - одна строка!
> Строка может состоять из команд!
> Команда может состоять из строк!
> :)
> http://rus-linux.net/MyLDP/BOOKS/abs-guide/flat/abs-book.htm...
> http://rus-linux.net/MyLDP/BOOKS/abs-guide/flat/abs-book.html
> http://tldp.org/LDP/abs/html/Ну вот на пыхе как скрипт будет выглядить примерно?Просьба без смеха))я просто начинающий в этом...
вот так?
назовём скрипт kopir.php<?php
$dirs = mkdir(163.131.10.1/shara1) //создаём список каталогов в шаре1
for i in dirs: //проходимся по каждому найденному каталогу в шаре1
$poddirs = find(i) //создаём список подкаталогов каждого каталога в шаре1
dirshcp=mkdir(163.131.10.2/shara2/18-%s%s%s%%s%%s%-%s%s)%i //вот здесь я вообще в затрудненнии как создать на шаре2 грубо гоовря папку(каталог) с именем такой же как в шаре1, но первые 2 символа заменить на символы 18
for j in poddirs: //проходимся по каждому подкаталогу найденного каталога в шаре1
recipient = mkdir(163.131.10.2/shara2/dirshcp/%s)%j //запоминаем в переменную путь куда скопировать
source = '%s/%s'%i%j //запоминаем в переменную путь откуда скопировать
cp(source,recipient) //копируем откуда куда файлы с сохранением иерархии и переименованием первых 2-х символов в имени верхнего каталога...далее переходим к сл каталогу в шаре1
?>запускаем скрипт на линуховой машине:
#php kopir.php
Но он не работает((
Хрен какую-то написал... Нарисуй как выглядят каталоги на шаре1 и как должны выглядить на шаре2.
Только в человеческом виде, а не 8с_658hy_13kk и 6р_hgl13_y1
> Хрен какую-то написал... Нарисуй как выглядят каталоги на шаре1 и как должны
> выглядить на шаре2.
> Только в человеческом виде, а не 8с_658hy_13kk и 6р_hgl13_y1Нужно получить следующую картину в итоге:
в шаре1 всё оставить без изменений:
--------------------------------------------------------
163.131.10.1/shara1|
|_ c1-speed-2012|
|_ 11_ma_12ye |
|_1.log
|_2.log
|_ 01_de_12ye |
|_51.log
|_22.log|_ 04_ap_12ye |
|_17.log
|_22.log|_ c2-speed-2011|
|_ 16_ye_12ye |
|_68.log
|_12.log
|_ 04_yi_12ye |
|_15.log
|_77.log|_ 08_av_12ye |
|_33.log
|_24.log
-----------------------------------------------------------
после запуска скрипта в шаре2:
------------------------------------------------------------
163.131.10.2/shara2|
|_ 18-speed-2012|
|_ 11_ma_12ye |
|_1.log
|_2.log
|_ 01_de_12ye |
|_51.log
|_22.log|_ 04_ap_12ye |
|_17.log
|_22.log|_ 18-speed-2011|
|_ 16_ye_12ye |
|_68.log
|_12.log
|_ 04_yi_12ye |
|_15.log
|_77.log|_ 08_av_12ye |
|_33.log
|_24.log
-----------------------------------------------------------------
на линуксовой тачке с адресом 163.131.10.3, где планируется запуск скрипта шары примантирвоаны сл образом:
163.131.10.1/shara1 в директорию /mnt/source
163.131.10.2/shara2в директорию /mnt/ recipientв шаре1 появляются периодически обновления и их нужно как указано выше скопировать в шару2, но то что ранее было уже записано-не перезаписывать, т.е. добавлять лишь обновления(новое).
примерно как-то так попытался визуализировать процесс
#!/бын/башшsrc=(c1-speed-2012 c2-speed-2011)
dst=(18-speed-2012 18-speed-2011)for ((i=0; i < ${#src[*]}; i++ ))
do
mkdir -p /mnt/recipient/${dst[i]};
rsync -au /mnt/source/${src[i]} /mnt/recipient/${dst[i]};
done;
>[оверквотинг удален]
> src=(c1-speed-2012 c2-speed-2011)
> dst=(18-speed-2012 18-speed-2011)
> for ((i=0; i < ${#src[*]}; i++ ))
> do
> mkdir
> -p /mnt/recipient/${dst[i]};
> rsync
> -au /mnt/source/${src[i]} /mnt/recipient/${dst[i]};
> done;
>
У меня немного не так...
у меня в /mnt/source создаются каталоги внезапно...т.е. я не могу заранее сказать какие имена каталоги будут..мне единственное,что нужно-это составить список этих каталогов и скопировать их в /mnt/recipient изменяя наименование каталогов(точнее первых 2-х символов-на 18 заменить).
А из этого примера мы замыкаемся исключительно на статические(заранее известные) имена каталогов...
как будет выглядить тогда формирование переменной src и самое главное переменной dst
так?
src=mkdir('/mnt/source')
dst=не знаю как(((рекурентными выражениями,но как их применить...вообщем затрудняюсь((
>[оверквотинг удален]
> src=(c1-speed-2012 c2-speed-2011)
> dst=(18-speed-2012 18-speed-2011)
> for ((i=0; i < ${#src[*]}; i++ ))
> do
> mkdir
> -p /mnt/recipient/${dst[i]};
> rsync
> -au /mnt/source/${src[i]} /mnt/recipient/${dst[i]};
> done;
>результат получился не совсем такой который ожидался....
вообщем да копирование произошло,но в итоге получили такую кртинку в /mnt/recipient
----------------------------------
/mnt/recipient|
|_18-speed-2012|
|_c1-speed-2012|
|_ 11_ma_12ye |
|_1.log
|_2.log
|_ 01_de_12ye |
|_51.log
|_22.log|_ 04_ap_12ye |
|_17.log
|_22.log
|_18-speed-2011|
|_ c2-speed-2011|
|_ 16_ye_12ye |
|_68.log
|_12.log
|_ 04_yi_12ye |
|_15.log
|_77.log|_ 08_av_12ye |
|_33.log
|_24.log
-----------------------------------------------------------------------------
т.е. в каталоге допустим 18-speed-2012 образовалася каталог c1-speed-2012, а нужно не сам каталог поместить, а его содержание с сохранением иерархии хранения(т.е. подкаталоги и т.п.)
#!/bin/bashSRC="/mnt/source"
DST="/mnt/recipient"
PREFIX="18"
SIZEOF_PREFIX=$(echo -ne $PREFIX | wc -c)cd $SRC;
for i in `ls`;
do
j=$(echo $PREFIX-`echo $i | cut -d"-" -f "$SIZEOF_PREFIX"-`); # Гы
mkdir -p $DST/$j;
rsync -au $SRC/$i/ $DST/$j;
done