Bash: Поиск и операции с файлами по выборке имен из БД
Поиск и перемещение записей (имя только UNIQUEID) по данным из CDR
#!/bin/bash #Назначим переменные из аргументов db=$1 col=$2 num=$3 src_dir=$4 dst_dir=$5 #Если кол-во аргументов меньше 5-ти выведем короткую справку if [ "$#" -ne 5 ]; then echo -e "\n\e[39m#######Usage:#######" echo -e "\n\e[39mFiles names select recordingfile \e[39mfrom \e[33mdatabase_name \e[39mwhere \e[33mcolumn \e[39m= \e[33mphone_number \n \e[39mwill be moved from \e[33msource_directory \e[39mto \e[33mdest_directory." echo -e "\n\e[39mPass arguments: \n \e[33mdatabase_name \n column\e[39m (dst || src) \n \e[33mpnone_number \n source_directory\e[39m (e.g /home/asterisk/monitor/recmp3) \n \e[33mdest_directory" echo -e "\n\e[39mExample: \e[32m./delete_record_by_db_select.sh asteriskcdrdb src 211 /var/spool/asterisk/monitor /root/scripts" exit fi #Назначим переменную с текущей датой s=$(date +%d-%m-%y_%H:%M:%S) #Назначим переменную для имени файла, в который будут сохраняться данные выборки d=$db-$num-$col-$s user="root" pass="" #SQL запрос: выбрать уникальные имена файлов где колонка = номер из аргументов. sqlread="select distinct(recordingfile) from $db.cdr where $col = '$num'" RES=`mysql -h127.0.0.1 -u $user --skip-column-names --default-character-set=utf8 $db -e "$sqlread"` #Сохраним полученные данные в текстовый файл. printf "$RES" >> $d echo "" >> $d #Создадим директорию для перемещения файлов (если нужно переместить) #mkdir $dst_dir/$db-$num-$col #Читаем файл с выборкой построчно, как массив while read recordingfile; do #Если имя файла содержит слеш, заменим его на тире rec="$num-${recordingfile//\//-}" #Если файл существует, выполняем какие-либо операции с ним. В обратном случае выводим сообщение. if [ -f "$src_dir/$recordingfile" ]; then #mv -f $src_dir/$recordingfile $dst_dir/$db-$num-$col/$rec echo -e "\e[39mFile \e[32m$src_dir/$recordingfile \e[39mMoved to \e[32m$dst_dir/$db-$num-$col/$rec" else echo -e "\e[39mNo such file - \e[31m$src_dir/$recordingfile \e[39mfor \e[33m${rec%-*}" fi done < $d
пример:
./delete_record_by_db_select.sh asteriskcdrdb src 211 /var/spool/asterisk/monitor /root/scripts
asteriskcdrdb - бд в которой ищем информацию о файлах (в данном примере это колонка recordingfile
из 'asteriskcdrdb.cdr)
src или dst - колонка по которой выбираем звонки определенного номера исходящие или входящие соответственно
211 - номер для которого ищем файлы
/var/spool/asterisk/monitor - директория в которой находятся файлы
/root/scripts - директория в которую мы хотим переместить файлы
в тестовом режиме закомментируйте строки при помощи #
:
mkdir $dst_dir/$db-$num-$col
и
mv -f $src_dir/$recordingfile $dst_dir/$db-$num-$col/$rec
В этом случае скрипт просто выведет список найденных файлов (если были найдены)
или сообщит, что файлы не были найдены
https://www.tldp.org/LDP/abs/html/string-manipulation.html
https://misc.flogisoft.com/bash/tip_colors_and_formatting