Temat: Katalogowanie obrazków z kamerki- skrypt
Niektórzy z Was pewnie stale magazynują obrazki z motion lub bezpośrednio z kamer IP. Pomagałem kumplowi z instalacją i obsługą Gargoyle bo chciał mieć mini monitoring ze swojej kamery IP. Jego kumpel napisał mu skrypt który kataloguje "pliki" które zawierają w nazwie datę i godzinę utworzenia zdjęcia/pliku. Niestety nie mogłem znaleźć u niego jak w cronie uruchamiany był ten skrypt (miało to katalogować co godzinę a usuwać zdjęcia starsze niż chyba 7 dni) ale sam kod wrzucam poniżej. Może ktoś zainteresowany tematem to jakoś wykorzysta lub wręcz zrobi z tego użyteczny pakiet z prostym plikiem konfiguracyjnym:)
Dodam tylko że ani osoba pisząca kod ani mój kumpel nie interesują się tym jak działa OpenWrt, ja sam się w tym kodzie nie łapię, ale może po prostu komuś się to przyda.
#!/bin/ash
# Skrypt do przenoszenia zdjec z katalogu glownego do podkatalogow
# Skrypt inaczej zwanym katalogowaniem zdjec/plikow ;)
# Sciezka podmontowania dodatkowego dysku
ROOT_DIR=$(cat /proc/mounts | grep usb_mount | awk '{print $2}')
ROOT_DIR="${ROOT_DIR}/"
# katalog ze zdjeciami
IMG_DIR="zdjecia/"
# katalog posegregowany
SORT_CAT="sort/"
# plik z lista plikow/zdjec
TMP_LIST_FILE="tmp_list"
TMP_LIST_ALL_FILE="tmp_list_all"
# aktualny rok
rok=$(date -D %s +"%Y" -d $(($(date +"%s")-1*60*60)))
# aktualny miesiac
miesiac=$(date -D %s +"%m" -d $(($(date +"%s")-1*60*60)))
# aktualny dzien
dzien=$(date -D %s +"%d" -d $(($(date +"%s")-1*60*60)))
# aktualna godzina
godzina=$(date -D %s +"%H" -d $(($(date +"%s")-1*60*60)))
# Aktualny katalog docelowy
ACT_CAT="${ROOT_DIR}${SORT_CAT}${rok}/${miesiac}/${dzien}/${godzina}/"
# tresc komunikatu helpa
USAGE="${0} \n\n -d Usuwanie plikow \n\n -m Przenoszenie plikow \n\n -s Lista plikow \n\n -L Usuwanie starych plikow oraz przenoszenie \n\n -A Przenoszenie wszystkich plikow"
lista_wszystkich_plikow() {
[ -s "${ROOT_DIR}${TMP_LIST_ALL_FILE}" ] && rm -f "${ROOT_DIR}${TMP_LIST_FILE}"
if [ -d "${ROOT_DIR}${IMG_DIR}" ]; then
find "${ROOT_DIR}${IMG_DIR}" -maxdepth 1 -mindepth 1 -iname "snapshot-*.jpg" -type f > "${ROOT_DIR}${TMP_LIST_ALL_FILE}"
if [ -s "${ROOT_DIR}${TMP_LIST_ALL_FILE}" ]; then
return 0
else
return 1
fi
else
return 1
fi
}
lista_plikow() {
[ -s "${ROOT_DIR}${TMP_LIST_FILE}" ] && rm -f "${ROOT_DIR}${TMP_LIST_FILE}"
if [ -d "${ROOT_DIR}${IMG_DIR}" ]; then
find "${ROOT_DIR}${IMG_DIR}" -maxdepth 1 -mindepth 1 -iname "snapshot-${rok}-${miesiac}-${dzien}-${godzina}*.jpg" -type f > "${ROOT_DIR}${TMP_LIST_FILE}"
if [ -s "${ROOT_DIR}${TMP_LIST_FILE}" ]; then
return 0
else
return 1
fi
else
return 1
fi
}
przeniesienie_wszystkich_plikow() {
if lista_wszystkich_plikow ; then
[ ! -s "${ROOT_DIR}${TMP_LIST_ALL_FILE}" ] && echo "Brak pliku z lista zdjec/plikow" && return 1
#[ ! -d "${ROOT_DIR}${SORT_CAT}" ] && mkdir -p "${ROOT_DIR}${SORT_CAT}" && chmod 755 "${ROOT_DIR}${SORT_CAT}"
for plik in `cat "${ROOT_DIR}${TMP_LIST_ALL_FILE}"`; do
rok_local=$(basename ${plik}|cut -d '-' -f 2)
miesiac_local=$(basename ${plik}|cut -d '-' -f 3)
dzien_local=$(basename ${plik}|cut -d '-' -f 4)
godzina_local=$(basename ${plik}|cut -d '-' -f 5)
if [[ "${rok_local}" =~ "^[0-9]*" ]] && [[ "${miesiac_local}" =~ "^[0-9]*" ]] && [[ "${dzien_local}" =~ "^[0-9]*" ]] && [[ "${godzina_local}" =~ "^[0-9]*" ]]; then
ACT_CAT_LOCAL="${ROOT_DIR}${SORT_CAT}${rok_local}/${miesiac_local}/${dzien_local}/${godzina_local}/"
[ ! -d "${ACT_CAT_LOCAL}" ] && mkdir -p "${ACT_CAT_LOCAL}" && chmod 755 "${ACT_CAT_LOCAL}"
if [ -d "${ACT_CAT_LOCAL}" ] ; then
tresc=$(mv "${plik}" "${ACT_CAT_LOCAL}" 2>&1)
ret="${?}"
if [ "${ret}" -ne 0 ];then
echo "Problem z przeniesieniem pliku - komunikat ${tresc} - kod bledu ${ret}"
fi
else
echo "Brak katalogu docelowego do przeniesienia zdjec"
exit 1
break
fi
unset ACT_CAT_LOCAL
else
echo "Plik nie przeniesiony ${plik} - failed substact year,month,day,hour"
fi
done
if [ "${ret}" -ne 0 ];then
return "${ret}"
else
return 0
fi
else
echo "Blad wykonania polecenia lista_plikow"
fi
}
przeniesienie_plikow() {
if lista_plikow ; then
[ ! -s "${ROOT_DIR}${TMP_LIST_FILE}" ] && echo "Brak pliku z lista zdjec/plikow" && return 1
[ ! -d "${ACT_CAT}" ] && mkdir -p "${ACT_CAT}" && chmod 755 "${ACT_CAT}"
for plik in `cat "${ROOT_DIR}${TMP_LIST_FILE}"`; do
if [ -d "${ACT_CAT}" ] ; then
tresc=$(mv "${plik}" "${ACT_CAT}" 2>&1)
ret="${?}"
if [ "${ret}" -ne 0 ];then
echo "Problem z przeniesieniem pliku - komunikat ${tresc} - kod bledu ${ret}"
fi
else
echo "Brak katalogu docelowego do przeniesienia zdjec"
exit 1
break
fi
done
if [ "${ret}" -ne 0 ];then
return "${ret}"
else
return 0
fi
else
echo "Blad wykonania polecenia lista_plikow"
fi
}
wyswietlanie_plikow(){
if [ -d "${ROOT_DIR}${IMG_DIR}" ]; then
echo "Szukam zdjec snapshot-${rok}-${miesiac}-${dzien}-${godzina}*.jpg"
find "${ROOT_DIR}${IMG_DIR}" -maxdepth 1 -mindepth 1 -iname "snapshot-${rok}-${miesiac}-${dzien}-${godzina}*.jpg" -type f
return "${?}"
else
echo "Brak katalogu ze zdjeciami/plikami"
return 1
fi
}
usuwanie_starych() {
#wersja BusyBox
rok_30=$(date -D %s +"%Y" -d $(($(date +"%s")-25*24*60*60 )))
miesiac_30=$(date -D %s +"%m" -d $(($(date +"%s")-25*24*60*60 )))
dzien_30=$(date -D %s +"%d" -d $(($(date +"%s")-25*24*60*60 )))
#wersja GNU
#rok_30=$(date --date='25 days ago' +"%Y")
#miesiac_30=$(date --date='25 days ago' +"%m")
#dzien_30=$(date --date='25 days ago' +"%d")
if [ -d "${ROOT_DIR}${SORT_CAT}" ]; then
for days in `seq "${dzien_30}" -1 1`; do
if [ -d "${ROOT_DIR}${SORT_CAT}${rok_30}/${miesiac_30}/${days}/" ]; then
echo "Usuwam ${ROOT_DIR}${SORT_CAT}${rok_30}/${miesiac_30}/${days}/"
tresc=$(rm -rf "${ROOT_DIR}${SORT_CAT}${rok_30}/${miesiac_30}/${days}/" 2>&1)
ret="${?}"
if [ "${ret}" -ne 0 ];then
echo "Problem z usunieciem katalogow - komunikat ${tresc} - kod bledu ${ret}"
fi
fi
done
for months in `seq "${miesiac_30}" -1 1`; do
if [ -d "${ROOT_DIR}${SORT_CAT}${rok_30}/${months}/" ]; then
echo "Usuwam ${ROOT_DIR}${SORT_CAT}${rok_30}/${months}/"
tresc=$(rm -rf "${ROOT_DIR}${SORT_CAT}${rok_30}/${months}/" 2>&1)
ret="${?}"
if [ "${ret}" -ne 0 ];then
echo "Problem z usunieciem katalogow - komunikat ${tresc} - kod bledu ${ret}"
fi
fi
done
else
echo "Brak katalogu ze zdjeciami/plikami, ktore mozna by bylo usunac"
return 1
fi
}
while getopts dmsLA f
do
case "${f}" in
d) usuwanie_starych;;
m) przeniesienie_plikow;;
s) wyswietlanie_plikow;;
L) usuwanie_starych; przeniesienie_plikow;;
A) przeniesienie_wszystkich_plikow;;
\?) echo -e "${USAGE}"; exit 1;;
*) echo -e "${USAGE}"; exit 1;;
esac
done