03.11.2017, 19:59 | #1 |
Senior Member
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600 |
Пишем скрипт
Лирическое :
Развернуть для просмотраНезатейливо так тему обозвал.
Данная тема по сути тоже: http://cyber-place.ru/showthread.php?t=2642 Но имхо лучше в кучу собирать, на готовых примерах проще сделать свой [свернуть] Имеется проблема - нужно мониторить файлы *.avi (30сек) создаваемые motion+ffmpeg. При смене освещенности, долгой тусовки индивидумов и прочее - бывает motion пишет все подряд, что нагружает железо. Нужно, запускать раз в минуту кроном скрипт, который будет мониторить текущую папку записи. Если он увидит имена файлов подряд скажем 5 минут (10 роликов по 30 секунд), задача скрипта остановить запись. Как это выглядит: Имеются скрипты: - сортировка: Развернуть для просмотраКод:
#!/bin/sh SRC_DIR="/mnt/sda№/a" DST_DIR="/mnt/sda№/$(date +%Y-%m-%d)/$(date +%Y-%m-%d_%H)" for F in ${SRC_DIR}/*; do SUB=$(date -d"$(stat -c%y "${F}")" +%Y%m%d) mkdir -p "${DST_DIR}/${SUB}" mv "${F}" "${DST_DIR}/${SUB}/" done [свернуть] - удаление старых папок: Развернуть для просмотраКод:
#!/bin/sh if [ $(df /mnt/sda№ | sed 's/.* \([0-9]\+\)%.*/\1/;$!d') -gt 80 ] then cd /mnt/sda№/ && ls -t | tail -n 2 | grep -v lost+found | xargs rm -rf $b else echo 'NOT DELETE' fi [свернуть] === Хотелось бы услышать светлые мысли Dioptimizer и paulerr Спасибо !
__________________
Читаю ваши мысли по аватару ... Последний раз редактировалось sunny; 03.11.2017 в 20:04. |
06.11.2017, 12:15 | #2 |
Senior Member
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689 |
Состряпал, монтирование и сами можете прикрутить.
Скрипт удаляет файлы заданного размера(равное и меньше) size и при условии если дата создания файлов в заданном интервале(равное и меньше) seconds. Развернуть для просмотраКод:
#!/bin/sh path=/mnt/* seconds=60 #Interval between files in seconds size=1048576 #Size of files(equal or less) in bytes for example 1048576 = 1Mbyte for file in $path do size1=`wc -c $file | cut -d' ' -f1` if [[ -f $file -a "$size1" -le "$size" ]] then file_to_remove= for file2 in $path do size2=`wc -c $file2 | cut -d' ' -f1` if [[ -f $file2 -a "$size2" -le "$size" ]] then if [[ $file != $file2 ]] then date1=`date -r $file +%s` date2=`date -r $file2 +%s` if [[ $date1 -gt $date2 ]] then if [[ $(($date1-$date2)) -le $seconds ]] then rm $file2 file_to_remove=$file fi else if [[ $(($date2-$date1)) -le $seconds ]] then rm $file2 file_to_remove=$file fi fi fi fi done if [[ -n "$file_to_remove" ]] then rm $file_to_remove fi fi done [свернуть] Быстро протестил, функционально работает, будут ошибки, сообщите. Но Вы протестируйте на тестовых файлах, прежде чем применять на реальной машине, мало ли.... Последний раз редактировалось Dioptimizer; 06.11.2017 в 13:47. |
06.11.2017, 14:36 | #3 | |
Senior Member
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600 |
Dioptimizer
Вы уникальны Огромадное спасибо! Цитата:
Объект "не режимный" - так что, можно смело экспериментировать..
__________________
Читаю ваши мысли по аватару ... |
|
10.11.2017, 01:59 | #4 |
Senior Member
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600 |
Никак пока не разберусь.
Остановился на этом: Код:
/usr/bin/script: line 45: cut: not found /usr/bin/script: line 45: wc: not found sh: out of range Дошло , очевидно отрабатывает по времени, а не по имени файла. Я копировал старые файлы с именем через 30 секунд подряд в дежурную папку - a и запускал скрипт - пытаясь его проверить... Заменил, шапка: Код:
PATH=/mnt/sda3/имя_дежурной папки seconds=30 size=13631488 for file in $PATH do size1=`wc -c $file | cut -d' ' -f1` if [[ -f $file -a "$size1" -le "$size" ]] then file_to_remove= for file2 in $PATH Нет, не работает все на месте..
__________________
Читаю ваши мысли по аватару ... Последний раз редактировалось sunny; 10.11.2017 в 13:06. |
10.11.2017, 13:00 | #5 |
Senior Member
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689 |
Странно, писал для OpenWRT, проверил еще на Ubuntu
(но для Ubuntu пришлось двойные скобки убирать [[ => [ и т.д..,) У Вас в PATH указана маска * ? |
10.11.2017, 13:00 | #6 |
Senior Member
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600 |
У меня LEDE
Код:
PATH=/mnt/sda3/a - у меня так 45 строка - это done (последняя строка скрипта) Нашел где-то, что кавычки внутри -d' ' при присвоении значения переменной не учитываются - `wc -c $file2 | cut -d' ' -f1` Может здесь чего ? === Поясняю еще, вдруг.. /mnt/sda3/a - дежурная папка, motion пишет постоянно туда, каждые 15 минут через cron этот скрипт - сортировка(первый пост) создает часовую папку и перемещает данные туда. Т.е. работать желательно с папкой - а (хотя...)
__________________
Читаю ваши мысли по аватару ... Последний раз редактировалось sunny; 10.11.2017 в 13:23. |
10.11.2017, 13:19 | #7 | |
Senior Member
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689 |
Цитата:
У Вас не указана маска файлов. Для for нужно как минимум два файла. То же самое чтоКод:
xubuntu@xubuntu:~$ ls ~/D ls: cannot access '/home/xubuntu/D': No such file or directory xubuntu@xubuntu:~$ xubuntu@xubuntu:~$ ls ~/D* /home/xubuntu/Desktop: chromium-browser.desktop default_iw_list.txt exo-file-manager.desktop new_iw_list.txt normal_boot_with_spi0.1_kernel_4_9.txt normal_boot_with_spi0.1.txt [OpenWrt-Devel] [PATCH 1_5] SPI: Also store ioc_base on inactive_.desktop ubiquity.desktop /home/xubuntu/Documents: /home/xubuntu/Downloads: lede-17.01.4-ar71xx-generic-tl-mr3220-v1-squashfs-factory.bin lede-ar71xx-generic-tl-mr3220-v1-squashfs-factory.bin Making density maps using Gnuplot - WikiGagneLague_files Making density maps using Gnuplot - WikiGagneLague.html xubuntu@xubuntu:~$ [свернуть] |
|
10.11.2017, 13:27 | #8 |
Senior Member
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600 |
Сделал так:
Код:
PATH=/mnt/sda3/* Код:
sh /usr/bin/p /usr/bin/p: line 45: cut: not found /usr/bin/p: line 45: wc: not found sh: out of range /usr/bin/p: line 45: /usr/bin/p: cut: not found line 45: wc: not found sh: out of range /usr/bin/p: line 45: cut: not found /usr/bin/p: line 45: wc: not found sh: out of range /usr/bin/p: line 45: cut: not found /usr/bin/p: line 45: wc: not found sh: out of range /usr/bin/p: /usr/bin/p: line 45: wc: not found line 45: cut: not found sh: out of range === Ага ничего не понял про маску файлов - пошел штудировать...))) А-а-а, "Семен Семенович"... попробую спасибо большое.. Код:
PATH=/mnt/sda3/a* wc: /mnt/sda3: Is a directory Код:
PATH=/mnt/sda3/a* Код:
sh /usr/bin/p /usr/bin/p: /usr/bin/p: line 45: cut: not found line 45: wc: not found sh: out of range Возможно fi там лишние имеются - вроде нет, может done не хватает...
__________________
Читаю ваши мысли по аватару ... Последний раз редактировалось sunny; 10.11.2017 в 13:49. |
10.11.2017, 13:55 | #9 | |
Senior Member
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689 |
Цитата:
Добился такой же ошибки если изменить название: Код:
./script.sh: 1: ./script.sh: cut_: not found ./script.sh: 1: ./script.sh: wc_: not found |
|
10.11.2017, 13:55 | #10 | ||
Senior Member
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600 |
Еще у ash date специфический не как у bash (замучил он меня, когда предыдущие скрипты подгонял)
Цитата:
Цитата:
Пожалуй здесь проблема: Код:
date1=`date -r $file +%s` date2=`date -r $file2 +%s` Может пакет bash поставить, чтобы не мучиться ?
__________________
Читаю ваши мысли по аватару ... Последний раз редактировалось sunny; 10.11.2017 в 14:41. |
||
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|