Страница 1 из 1
Выполнения скрипта в разных директориях
Добавлено: 2012-10-17 12:43:00
gonya
Доброго времени суток.
Столкнулся с проблемой - при большом количестве hlds очень муторно их обновлять (т.е. это вводить команду ./steam -command update -game cstrike -dir /вот тут и менять каждый раз/)
Хотелось бы узнать - как можно автоматизировать этот процесс?
директории идут такого вида:
/data/192.168.1.1/data/27001
/data/192.168.1.1/data/27002
/data/192.168.1.1/data/27006
/data/192.168.1.2/data/27001
в теории я понимаю, что нужно указать в скрипте шаг, с которым он будет менять директорию, указать начальное и конечное значения, после выполнения в которых (27001-27006) он перейдет к следующей родительской директории (192.168.1.1 - 192.168.1.2) и т.д.
но вот знаний не хватает. подскажете решение или хотя бы где курить именно про это?)
Re: Выполнения скрипта в разных директориях
Добавлено: 2012-10-17 13:51:48
kpp
Уточните вопрос.
нужно указать в скрипте шаг, с которым он будет менять директорию
Не понятно по каким каталогам ходить по каким не ходить?
Как вариант - получить список каталогов, и пройти по этому списку выполняя скрипт.
Re: Выполнения скрипта в разных директориях
Добавлено: 2012-10-17 14:17:42
gonya
kpp писал(а):Уточните вопрос.
нужно указать в скрипте шаг, с которым он будет менять директорию
Не понятно по каким каталогам ходить по каким не ходить?
Как вариант - получить список каталогов, и пройти по этому списку выполняя скрипт.
именно так и нужно.
получается такой алгоритм работы:
перечисляем родительские каталоги (/192.168.1.1/data/ , /192.168.1.2/data/, /192.168.1.3/data/)
в них скрипт ищет директории вида 27001, 27002 и т.д.
после этого выполняется команда:
./steam -command update -game cstrike -dir *
поочередно подставляются найденные директории*
Re: Выполнения скрипта в разных директориях
Добавлено: 2012-10-17 15:17:44
kpp
Примерно так, не проверял:
Код: Выделить всё
MAIN_DIR_LIST="/192.168.1.1/data/ /192.168.1.2/data/ /192.168.1.3/data/"
for mn_dr_ls in "${MAIN_DIR_LIST}"
do
for dr_ls in ${mn_dr_ls}[0-9][0-9][0-9][0-9][0-9]
do
#./steam -command update -game cstrike -dir ${dr_ls}
# for test
echo "./steam -command update -game cstrike -dir ${dr_ls}"
done
done
Нужно добавить проверку на директорию .
Можно выпендриться и сделать все одним find-ом.
Re: Выполнения скрипта в разных директориях
Добавлено: 2012-10-17 15:31:06
kpp
Что-то типа такого:
Код: Выделить всё
find /192.168.1.1/data/ /192.168.1.2/data/ /192.168.1.3/data/ -prune -type d -name "[0-9][0-9][0-9][0-9][0-9]" -exec echo {} \;
Вместо
echo {} выполнение скрипта.
Re: Выполнения скрипта в разных директориях
Добавлено: 2012-10-17 15:37:02
gonya
создал для теста два каталога: level1 и level2. в них - 27001, 27002, 27003 (в каждом)
Код: Выделить всё
#!/bin/bash
MAIN_DIR_LIST="/home/servers/level1/ /home/servers/level2/"
for mn_dr_ls in "${MAIN_DIR_LIST}"
do
for dr_ls in ${mn_dr_ls}[0-9][0-9][0-9][0-9][0-9]
do
#./steam -command update -game cstrike -dir ${dr_ls}
# for test
echo "./steam -command update -game cstrike -dir ${dr_ls}"
done
done
в итоге выполняю скрипт ./test.sh и получаю вывод:
Код: Выделить всё
./steam -command update -game cstrike -dir /home/servers/level1/
./steam -command update -game cstrike -dir /home/servers/level2/27001
./steam -command update -game cstrike -dir /home/servers/level2/27002
т.е. выполняется, но для первого каталога неверно - команда выполняется в нем, а не в нужных директориях, как с level2
Re: Выполнения скрипта в разных директориях
Добавлено: 2012-10-17 15:48:27
kpp
Вам прямо готовое решение подавай:
Код: Выделить всё
#!/bin/sh
MAIN_DIR_LIST="/home/servers/level1/ /home/servers/level2/"
for mn_dr_ls in ${MAIN_DIR_LIST}
do
for dr_ls in ${mn_dr_ls}[0-9][0-9][0-9][0-9][0-9]
do
[ -d "${dr_ls}" ] || continue
#./steam -command update -game cstrike -dir ${dr_ls}
# for test
echo "./steam -command update -game cstrike -dir ${dr_ls}"
done
done
или
Код: Выделить всё
find /home/servers/level1/ /home/servers/level2/ -depth 1 -type d -name "[0-9][0-9][0-9][0-9][0-9]" -exec echo {} \;
Re: Выполнения скрипта в разных директориях
Добавлено: 2012-10-17 16:28:13
gonya
kpp писал(а):Вам прямо готовое решение подавай:
я понимаю, что это азы, но даже их не знаю. что ж поделать? только начинаю открывать для себя.
спасибо, кстати, все работает как нужно