Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
BAV_Lug
- сержант
- Сообщения: 299
- Зарегистрирован: 2006-06-02 15:38:28
- Откуда: Харьков
Непрочитанное сообщение
BAV_Lug » 2009-04-23 14:09:49
Есть директория в которой хранятся файлы вида
Код: Выделить всё
20090422......
20090423......
20090424......
и т.д.
Нужно написать скрипт который бы переносил эти файлы по директориям вида "год\месяц\дата"
Чето я тормознулся в самом начале. Чем парсить имена файлов никак не могу сообразить.
Можно конечно написать это на ПХП (там я знаю как распарсить), но хочется на SH.
BAV_Lug
-
Хостинг HostFood.ru
-
Хостинг HostFood.ru
Тарифы на хостинг в России, от 12 рублей:
https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.:
https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах:
https://www.host-food.ru/domains/
-
BAV_Lug
- сержант
- Сообщения: 299
- Зарегистрирован: 2006-06-02 15:38:28
- Откуда: Харьков
Непрочитанное сообщение
BAV_Lug » 2009-04-23 14:55:41
Ладно я тут почитал, и понял что парсить похоже прийдется awk
Но вот как ему задать, чтобы он вывел например первые четыре символа из строки, я так и не понял

BAV_Lug
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2009-04-23 15:38:12
BAV_Lug писал(а):Ладно я тут почитал, и понял что парсить похоже прийдется awk
да вроде и обычный шелл подойдёт
zg
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2009-04-23 15:48:45
BAV_Lug писал(а):Уже написал. Всем спасибо

дак выложи, раз уж тему поднял -)
zg
-
BAV_Lug
- сержант
- Сообщения: 299
- Зарегистрирован: 2006-06-02 15:38:28
- Откуда: Харьков
Непрочитанное сообщение
BAV_Lug » 2009-04-23 16:18:20
Вот, что вышло
Код: Выделить всё
#!/bin/sh
PathToLoad1="/home/web/usr/home/arhivwebcam/cam1"
PathToCopy1="/home/web/usr/home/arhivwebcam/sort/cam1"
cd $PathToLoad1
for i in `ls -A`
do
if [ -f $i ]
then
year=`echo $i | awk -F\. '{print substr($1, 1, 4)}'`
month=`echo $i | awk -F\. '{print substr($1, 5, 2)}'`
day=`echo $i | awk -F\. '{print substr($1, 7, 2)}'`
if ( ! [ -d "$PathToCopy1/$year" ] )
then
mkdir $PathToCopy1/$year
fi
if ( ! [ -d "$PathToCopy1/$year/$month" ] )
then
mkdir $PathToCopy1/$year/$month
fi
if ( ! [ -d "$PathToCopy1/$year/$month/$day" ] )
then
mkdir $PathToCopy1/$year/$month/$day
fi
mv $i $PathToCopy1/$year/$month/$day/$i
fi
done
А вообще собираюсь статью написать, про то как я прикручивал веб камеры на удаленном объекте с просмотром их и ведением архива.
BAV_Lug
-
f_andrey
- майор
- Сообщения: 2651
- Зарегистрирован: 2007-12-26 1:22:58
- Откуда: СПб
-
Контактная информация:
Непрочитанное сообщение
f_andrey » 2009-04-23 16:44:16
BAV_Lug писал(а):А вообще собираюсь статью написать, про то как я прикручивал веб камеры на удаленном объекте с просмотром их и ведением архива.
Если вдруг соберетесь, то в плане конструктивной критики, подготовьтесь по теме посерьезнее, а то пока ваш скрипт ..., ну в общем легче новый написать чем имеющийся править

f_andrey
-
BAV_Lug
- сержант
- Сообщения: 299
- Зарегистрирован: 2006-06-02 15:38:28
- Откуда: Харьков
Непрочитанное сообщение
BAV_Lug » 2009-04-23 16:49:12
f_andrey писал(а):BAV_Lug писал(а):А вообще собираюсь статью написать, про то как я прикручивал веб камеры на удаленном объекте с просмотром их и ведением архива.
Если вдруг соберетесь, то в плане конструктивной критики, подготовьтесь по теме посерьезнее, а то пока ваш скрипт ..., ну в общем легче новый написать чем имеющийся править

Давайте от критики переходить к конструктиву. То, что я привел, успешно работает. Да может не красиво выглядит, но работает.
Конечно обхаять чужое проще, чем что-то по делу написать.
PS Жаль, что на этом форуме запрещено ругаться матом. Выводят просто такие люди.
BAV_Lug
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2009-04-23 16:54:17
f_andrey писал(а):ну в общем легче новый написать чем имеющийся править
-))) взял бы да написал
Код: Выделить всё
#!/bin/sh
for FILE in 20090422 20090423 20090424
do
YEAR=${FILE%[0-9][0-9][0-9][0-9]}
MONTH=${FILE%[0-9][0-9]}
MONTH=${MONTH#[0-9][0-9][0-9][0-9]}
DAY=${FILE#[0-9][0-9][0-9][0-9][0-9][0-9]}
DIR=$YEAR/$MONTH/$DAY
echo "[-d \"$DIR\"] || mkdir -p \"$DIR\""
echo "mv $FILE $DIR/$FILE"
done
Результат будет такой
Код: Выделить всё
[-d "2009/04/22"] || mkdir -p "2009/04/22"
mv 20090422 2009/04/22/20090422
[-d "2009/04/23"] || mkdir -p "2009/04/23"
mv 20090423 2009/04/23/20090423
[-d "2009/04/24"] || mkdir -p "2009/04/24"
mv 20090424 2009/04/24/20090424
в принципе это готовый шелл код

zg
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2009-04-23 17:39:42
более правильный вариант с awk
Код: Выделить всё
#!/bin/sh
SDIR=ff
DDIR=/some/dir
ls -1 "$SDIR" | awk '{print substr($1,1,4), substr($1,5,2), substr($1,7,2), $1}' | while read YEAR MONTH DAY FILE
do
DIR=$DDIR/$YEAR/$MONTH/$DAY
echo "[-d \"$DIR\"] || mkdir -p \"$DIR\""
echo "mv $SDIR/$FILE $DIR/$FILE"
done
SDIR - папка с файлами (типа source dir)
DDIR - точка назначения (типа destination dir)

zg