Segue um script para copiar dados para um outros computador e depois extrair so dados, que estão em formato “.tar”. Pode parecer um pouco com “usar um canhão para matar mosca”, mas a ideia é mais mostrar algumas rotinas que acho interessante. Por exemplo, a entrada do script deve ser o ano seguido do mês e separados por espaço – caso não seja esse o formato dos argumentos de entrada, o script pára (“exit 1”). Também tem duas rotinas para pegar, além do mês informado, o último dia do mês anterior e o primeiro dia do mês seguinte. Depois vem a rotina para copiar os dados (a opção R do comando rsync mantém estrutura de diretórios). Por último, a construção de dois vetores (de estações e de diretórios) para serem percorridos por um laço e executar a ação proposta.
#!/bin/bash
# Script para receber ano e mês e realizar função para todos os diretórios
if [ -z "$1" ]
then
echo "Indique ANO e MES como argumentos!"
echo "./script.sh yyyy mm dd"
exit 1
fi
if [ -z "$2" ]
then
echo "Indique o MES como segundo argumento!"
echo "./script.sh yyyy mm dd"
exit 1
fi
ano=$1
mes=$2
dia=$3
host="192.168.0.1"
# Definir último dia do mês anterior
if [ "$mes" -eq "1" ]
then
ano_ant=$(($ano-1))
mes_ant=12
else
ano_ant=$ano
mes_ant=$(($mes-1))
fi
dia_ant=`echo $(cal $mes_ant $ano_ant) | awk '{print $NF}'`
# Definir primeiro dia do mês seguinte
if [ "$mes" -eq "12" ]
then
ano_pos=$(($ano+1))
mes_pos=01
else
ano_pos=$ano
mes_pos=$(($mes+1))
fi
dia_pos=01
# Envia dados para outro computador
sshpass -p "SENHA" rsync -avzR */BACKUP/$ano_ant/$ano_ant"-"$mes_ant"-"$dia_ant/ user@$host:/data/Sensores/
sshpass -p "SENHA" rsync -avzR */BACKUP/$ano/$ano"-"$mes"-"*/ user@$host:/data/Sensores/
sshpass -p "SENHA" rsync -avzR */BACKUP/$ano_pos/$ano_pos"-"$mes_pos"-"$dia_pos/ user@$host:/data/Sensores/
est=( Est1 Est2 Est3 )
# Criar vetor com os diretórios com os arquivos a serem extraídos
str=$dir_in'/'$ano_ant'/'$ano_ant'-'$mes_ant'-'$dia_ant" "`ls -d $dir_in'/'$ano'/'$ano'-'$mes'-'*`" "$dir_in'/'$ano_pos'/'$ano_pos'-'$mes_pos'-'$dia_pos
array=($str)
for estacao in "${est[@]}"; do
echo "Extraindo "$estacao" "$ano"-"$mes
# Diretorio de origem dos arquivos originais a serem extraídos
dir_in='/data/Sensores/'$estacao'/BACKUP'
for i in "${!array[@]}"; do
diryymmdd=`echo "${array[$i]}"`
echo $diryymmdd
for dirdia in $diryymmdd/*.tar; do
echo $dirdia
# Extrair arquivos
tar -xf $dirdia
done
done
done
exit 0
Caso precise juntar dois ou mais arquivos, é comum utilizar “cat arq1 arq2 > arqfinal” para colocar o conteúdo de arq2 logo depois de arq1 em um novo arquivo. Mas se é necessário colocar uma linha ao lado da outra (como se fosse unir colunas em um mesmo arquivo), existe o comando paste: “paste arq1 arq2”. Ele irá unir a linha 1 de arq1 com a linha 1 de arq2, separando-as com um TAB, e assim sucessivamente. Caso queira substituir as tabulações por espaços em branco, utilize depois o comando “expand -t 1” (substitui 1 tab por 1 espaço).
Uma opção mais elaborada é através do seguinte comando: .join -t’:’ -1 N -2 N arq1 arq2 Ele permite juntar dois ou mais arquivos baseando-se em um campo em comum; nesse caso, ele define o separador de campos como “dois pontos” e as colunas 1 e 2 dos arquivos arq1 e arq2, respectivamente, como sendo os campos em comum para comparação.

