mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-07-28 17:32:00 +08:00
171 lines
5.5 KiB
Bash
Executable File
171 lines
5.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
_source="$(uci get nvr.config.nvr_sourcelist)"
|
|
_directory="$(uci get nvr.config.storage_directory | sed 's/\/$//')"
|
|
_disk_name="$(uci get nvr.config.disk_name)"
|
|
_rec_time="$(uci get nvr.config.rec_time)"
|
|
_size="$(expr $(uci get nvr.config.storage_size) \* 1024)"
|
|
_total_days="$(uci get nvr.config.total_days)"
|
|
_loop_write="$(uci get nvr.config.loop_write)"
|
|
_fulldisk="$(uci get nvr.config.fulldisk)"
|
|
_disk_usage="$(echo $(uci get nvr.config.disk_usage) | cut -d '%' -f1)"
|
|
_enable_audio="$(uci get nvr.config.enable_audio)"
|
|
_all_clients=""
|
|
_disk=""
|
|
|
|
function detect_disk() {
|
|
if [ "$(df -hT | grep "${_disk_name}")" = "" ];then
|
|
_disk="X"
|
|
else
|
|
_disk=""
|
|
fi
|
|
}
|
|
|
|
function test_totaldays() {
|
|
_dir_nums="$(ls -l $_directory | grep "^d" | wc -l)"
|
|
if [ "$_total_days" -lt "$_dir_nums" ];then
|
|
_first_dir="$(ls -l $_directory | grep "^d" | head -n1 | awk '{print$9}')"
|
|
rm -rf $_directory/$_first_dir
|
|
fi
|
|
}
|
|
|
|
function count_filesize() {
|
|
_client_dir="$(ls -l $_directory/$_day_target | grep "^d" | awk '{print$9}')"
|
|
for c in $_client_dir;do
|
|
_single_filesize="$(ls -l $_directory/$_day_target/$c | head -n1 | awk '{print$5}')"
|
|
if [ "$_single_filesize" = "" ];then
|
|
_single_filesize=0
|
|
else
|
|
_single_filesize="$(expr $_single_filesize / 1024)"
|
|
fi
|
|
_nums_clientdir_file="$(ls -l $_directory/$_day_target/$c | grep "^-" | wc -l)"
|
|
_total_filesize="$(expr $_single_filesize \* $_nums_clientdir_file + $_total_filesize)"
|
|
done
|
|
}
|
|
|
|
function search_daydir_head() {
|
|
_day_target="$(ls -l $_directory | grep "^d" | head -n1 | awk '{print$9}')"
|
|
count_filesize
|
|
}
|
|
|
|
function search_daydir_tail() {
|
|
_day_target="$(ls -l $_directory | grep "^d" | tail -n1 | awk '{print$9}')"
|
|
count_filesize
|
|
}
|
|
|
|
function search_daydir_midone() {
|
|
_day_target="$(ls -l $_directory | grep "^d" | head -n2 | tail -n1 | awk '{print$9}')"
|
|
count_filesize
|
|
}
|
|
|
|
function test_dir_space() {
|
|
if [ "$(df -h | grep $_disk_name | awk '{print$5}' | head -n 1 | cut -d '%' -f1)" -ge "$_disk_usage" ];then
|
|
_dir_space="$(expr $_size + 9999)"
|
|
else
|
|
_daydir_num="$(ls -l $_directory | grep "^d" | wc -l)"
|
|
if [ "$_daydir_num" -ge 3 ];then
|
|
_day_target="$(ls -l $_directory | grep "^d" | head -n2 | tail -n1 | awk '{print$9}')"
|
|
_mid_daydir_num="$(expr $_daydir_num - 2)"
|
|
search_daydir_midone
|
|
_total_filesize="$(expr $_total_filesize \* $_mid_daydir_num)"
|
|
search_daydir_head
|
|
search_daydir_tail
|
|
elif [ "$_daydir_num" -eq 2 ];then
|
|
search_daydir_head
|
|
search_daydir_tail
|
|
else
|
|
search_daydir_head
|
|
fi
|
|
_dir_space=$_total_filesize
|
|
fi
|
|
}
|
|
|
|
function test_loopwrite() {
|
|
if [ "$_loop_write" -eq 1 ];then
|
|
_total_filesize=0
|
|
if [ "$_fulldisk" -eq 1 ];then
|
|
if [ "$(df -h | grep $_disk_name | awk '{print$5}' | head -n 1 | cut -d '%' -f1)" -ge "$_disk_usage" ];then
|
|
_dir_space="$(expr $_size + 9999)"
|
|
else
|
|
_dir_space=1
|
|
fi
|
|
else
|
|
test_dir_space
|
|
fi
|
|
while [ "$_dir_space" -ge "$_size" ];do
|
|
_first_dir="$(ls -l $_directory | grep "^d" | head -n1 | awk '{print$9}')"
|
|
_action_dir="$(ls -l $_directory/$_first_dir | grep "^d" | awk '{print$9}')"
|
|
for i in $_action_dir;do
|
|
rm "$_directory/$_first_dir/$i/$(ls -l $_directory/$_first_dir/$i | grep "^-" | head -n1 | awk '{print$9}')"
|
|
if [ "$(ls -l $_directory/$_first_dir/$i | grep "^-")" = "" ];then
|
|
rm -rf $_directory/$_first_dir/$i
|
|
fi
|
|
if [ "$(ls -l $_directory | grep "^d" | wc -l )" -gt 1 ];then
|
|
if [ "$(du -s $_directory/$_first_dir | awk '{print$1}')" -le "$(expr $_totalnum \* 4 + 4)" ];then
|
|
rm -rf $_directory/$_first_dir
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
_total_filesize=0
|
|
if [ "$_fulldisk" -eq 1 ];then
|
|
if [ "$(df -h | grep $_disk_name | awk '{print$5}' | head -n 1 | cut -d '%' -f1)" -ge "$_disk_usage" ];then
|
|
_dir_space="$(expr $_size + 9999)"
|
|
else
|
|
_dir_space=1
|
|
fi
|
|
else
|
|
test_dir_space
|
|
fi
|
|
done
|
|
else
|
|
echo "do not test looping write!"
|
|
fi
|
|
}
|
|
|
|
case $_source in
|
|
hikvision)
|
|
_hik_user="$(uci get nvr.config.hik_user)"
|
|
_hik_pass="$(uci get nvr.config.hik_pass)"
|
|
if [ "$(uci get nvr.config.hik_list)" = "one-by-one" ];then
|
|
_all_clients=$(uci get nvr.config.hikpush)
|
|
_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
|
|
else
|
|
_ipstart="$(uci get nvr.config.hik_batch_start)"
|
|
_ipend="$(uci get nvr.config.hik_batch_end)"
|
|
_startnum="$(echo $_ipstart | cut -d '.' -f4)"
|
|
_totalnum=$(expr $(echo $_ipend | cut -d '.' -f4) - $(echo $_ipstart | cut -d '.' -f4) + 1)
|
|
for i in $(seq 1 $_totalnum);do
|
|
_all_clients="$_all_clients $(echo $_ipstart | sed 's/[0-9]*$//')$(expr $_startnum + $i - 1)"
|
|
done
|
|
fi
|
|
;;
|
|
tplink)
|
|
_tplink_user="$(uci get nvr.config.tplink_user)"
|
|
_tplink_pass="$(uci get nvr.config.tplink_pass)"
|
|
if [ "$(uci get nvr.config.tplink_list)" = "one-by-one" ];then
|
|
_all_clients=$(uci get nvr.config.tplinkpush)
|
|
_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
|
|
else
|
|
_ipstart="$(uci get nvr.config.tplink_batch_start)"
|
|
_ipend="$(uci get nvr.config.tplink_batch_end)"
|
|
_startnum="$(echo $_ipstart | cut -d '.' -f4)"
|
|
_totalnum=$(expr $(echo $_ipend | cut -d '.' -f4) - $(echo $_ipstart | cut -d '.' -f4) + 1)
|
|
for i in $(seq 1 $_totalnum);do
|
|
_all_clients="$_all_clients $(echo $_ipstart | sed 's/[0-9]*$//')$(expr $_startnum + $i - 1)"
|
|
done
|
|
fi
|
|
;;
|
|
rtmp-url)
|
|
_all_clients=$(uci get nvr.config.rtmppush)
|
|
_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
|
|
;;
|
|
multiple-types)
|
|
_all_clients=$(uci get nvr.config.multipush)
|
|
_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
|
|
;;
|
|
none)
|
|
exit 0
|
|
;;
|
|
esac
|