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

Только авторизованные участники могут оставлять комментарии.
  • blog/search_file_by_db_info.txt
  • Последние изменения: 2019/03/27