Limpando lixeira centralizada do Samba

Publicado por Rogério Tomassoni em 19/04/2009

[ Hits: 12.889 ]

 


Limpando lixeira centralizada do Samba



Aí vai um pequeno script para limpar lixeira do Samba, lembrando que esse script limpa a lixeira por usuário, ou seja, dentro do diretório lixeira existe o diretório de cada usuário que excluiu algo.

O Samba usa uma lixeira centralizada para todos usuários. Sua estrutura seria assim:

.lixeira
|___ usuário-01
|      |_____arquivo-01
|      |_____arquivo-02
|___ usuário-02
|___ usuário-03
       |_____arquivo-01
       |_____arquivo-n

DICA: No Samba, as configurações para fazer uma lixeira centralizada ficariam assim, na seção Global:

vfs object = recycle

recycle:repository = /hd500g/.lixeira/%U # Note a variável de substituição %U aqui é substituída pelo nome do usuário
recycle:exclude = *.tmp, *.log, *.mp3 # Arquivos que nem para lixeira vão, são deletados mesmo
recycle:versions = yes#Mantem versões de arquivo com mesmo nome

Quer um pouco mais sobre variáveis de substituição?
  • %S Nome do serviço;
  • %u Nome do usuário do serviço;
  • %g Nome do grupo primário/principal do usuário, referente ao %u;
  • %U Nome do usuário da seção;
  • %G Nome do grupo primário/principal, referente ao %U;
  • %H Diretório Home do usuário, referente ao %u;
  • %L Nome NetBIOS do servidor Samba;
  • %I Endereço IP do cliente,
  • %T Data e hora.

Existem mais, mas essas são as mais utilizadas (no meu ponto de vista).

Agora vamos ao script:

#!/bin/bash
#Script com para limpeza recursiva para lixeira do Samba


urlDir="/hd500g/.lixeira"; #Diretório raiz da lixeira
arqTmp="/tmp/arvore.txt"; #Arquivo temporário para criação da árvore de diretório
arqLog="/var/log/lixeira.log"; #Arquivo de log, onde irá logar os arquivos removidos
idade="15"; # idade do arquivo em dias

ls -RF $urlDir |grep : |tr : / > $arqTmp #Lista os diretórios recursivamente e salva em arvore.txt, especificado acima
contDir=$(cat $arqTmp) # Conteúdo de arvore.txt

DATA_LOG=`date +%a-%d-%m-%Y-%H:%M:%S` # Data para manter o log mais específico
rm -f $arqLog # Removendo arquivo de log, para não enchê-lo (Se for usar logrotate nem precisa)

echo -e "***************$DATA_LOG***************" >> $arqLog # Cabeçalho para o log (Enfeite)

for x in $contDir; do #Loop para entrar nos subdiretórios

find $urlDir -type f -ctime $idade 2 > /dev/null | # Procura pelos arquivos com a idade especificada
while read arquivo; do
echo "Excluido: $arquivo" >> $arqLog # Aqui loga o nome do arquivo a ser removido
rm -rf $arquivo # Remove arquivo

done
done

echo -e "***************$DATA_LOG***************" >> $arqLog # Rodapé para o log (Enfeite)

rm -f $arqTmp # Remove o arquivo temporário com a árvore de diretórios

exit 0; #Finaliza

Bem, é isso aí!

Para mim funciona perfeitamente junto com crontab (toda sexta-feira ele roda).

Espero que ajude.

Outras dicas deste autor

Criando plugin para Nagios

Renomeando Konsole

Suporte remoto com x11vnc

Suporte remoto com VNC LTSP 4.2

Limitando sessões KDE LTSP 4.2

Leitura recomendada

Converter maiúsculos em minúsculos e vice-versa com shell

Capturando screenshots com Shell Script

Aulas Shell Script do zero - Parte 1

Capturando os últimos artigos do VivaoLinux

Substituindo palavras no editor VI

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts