Script para arquivar gravações de chamadas em pastas de data

3

Temos um PBX IP que está executando o Asterisk e é configurado pelo fabricante para excluir gravações de chamadas após um determinado período de tempo. Eu estou fazendo o backup para um servidor Ubuntu usando o rsync para que possamos armazená-los indefinidamente.

O problema que tenho é que todas as gravações são colocadas em um único diretório. Convenientemente, os arquivos são nomeados na mesma estrutura:

  

year.month.day.hour.min.sec-callref-extension-callerid.wav

O que eu gostaria de fazer é configurar uma estrutura de diretórios que seja Ano / Mês / Dia (com o mês sendo corretamente ordenado), então mova cada um dos arquivos para a ordem correspondente.

Nota pessoal: Estou confiante em trabalhar com o Ubuntu na linha de comando, mas não tenho experiência em executar ou automatizar scripts, por isso o conselho é muito bem-vindo. (Feliz em aprender!) Agradecemos antecipadamente.

O script que foi fornecido anteriormente está funcionando muito bem. Eu cheguei a mais um pequeno problema.

Estou usando um crontab para rsync IPPBX para o Ubuntu Server e outro para registrar essas gravações usando o script abaixo. Todas as noites, o rsync faz o download de todas as gravações, pois acha que a pasta de destino está vazia.

Eu tenho duas perguntas: O rsync pode ser incorporado ao script abaixo para que um único arquivo seja usado? O script pode entender o que já foi baixado para que ele baixe apenas novos arquivos?

    
por BatchHeader 30.06.2012 / 12:03

1 resposta

3

Isso é bem simples com o bash. Basta iterar os arquivos, extrair o ano, mês e dia e, em seguida, movê-lo de acordo.

#!/usr/bin/env bash

# iterate all the wav-files that has at least 3 dots in addition to the extension
for file in *.*.*.*.wav; do

    # In the case of no files matching the glob, file will contain the glob itself
    # which will make the mkdir later on create './*/*/*'. Avoid that by testing
    # if file contains an existing file.
    [[ -e $file ]] || continue

    # split out year month and day from the filename
    IFS=. read -r year month day _ <<< "$file"

    # make sure the directories exist, then move it
    mkdir -p "./$year/$month/$day" &&
    mv "./$file" "./$year/$month/$day"
done
    
por geirha 30.06.2012 / 12:44

Tags