Limpando o .recycle do Samba
Dica publicada em Shell Script / Avançado
Limpando o .recycle do Samba
Quando utilizamos o Samba como PDC, temos a opção de
utilizar uma lib chamada ".recycle", que realiza a tarefa
de manter em um diretório (.recycle) todos os arquivos apagados
pelos usuários, o que muitas vezes é bem mais rápido do que
voltar backup e bibibi bóbóbó.
Um detalhe importante desta lib .recycle do Samba é que quando um determinado arquivo é excluído de sua pasta original e enviado para a lixeira, é mantida a data original do arquivo e não a data de exclusão do mesmo, o que trás dificuldades se queremos limpar a nossa lixeira deixando apenas os arquivos excluídos nos últimos 30 dias.
Para saber o dia em que o arquivo foi enviado para a lixeira, vamos utilizar o seguinte comando:
$ stat /fileserver/.recycle/teste.txt
$ stat -c "%n %z" /fileserver/.recycle/teste.txt
teste.txt Tue May 31 19:44:06 2005
Onde:
Um detalhe importante desta lib .recycle do Samba é que quando um determinado arquivo é excluído de sua pasta original e enviado para a lixeira, é mantida a data original do arquivo e não a data de exclusão do mesmo, o que trás dificuldades se queremos limpar a nossa lixeira deixando apenas os arquivos excluídos nos últimos 30 dias.
Para saber o dia em que o arquivo foi enviado para a lixeira, vamos utilizar o seguinte comando:
$ stat /fileserver/.recycle/teste.txt
File: "/fileserver/.recycle/teste.txt" Size: 32256 Blocks: 64 IO Block: 4096 Regular File Device: 806h/2054d Inode: 6373477 Links: 1 Access: (0766/-rwxrw-rw-) Uid: ( 850/linux) Gid: ( 850/linux) Access: Tue May 31 19:34:00 2005 Modify: Tue May 31 19:33:46 2005 Change: Tue May 31 19:44:06 2005O que nos interessa aqui é a linha do "Change", que contém a data, hora e ano em que o arquivo foi enviado para a lixeira. Para isto utilizamos:
$ stat -c "%n %z" /fileserver/.recycle/teste.txt
teste.txt Tue May 31 19:44:06 2005
Onde:
- -c - para definir formato
- %n - exibe nome do arquivo
- %z - exibe data da última modificação
#!/bin/sh
#
# recycle.sh - Utilizado para remover arquivos da lixeira do samba
#
# Autor: Saulo Fabrin <caroco@gmail.com>
#
# Este programa deve ser colocado no cron e executado todos os dias
# para remover arquivo antigos da lixeira do samba com base nos
# parâmetros "DIR" e "DAT"
#
# Onde:
#
# DIR - diretório principal onde esta localizado o .recycle
# DAT - remove os arquivos há 30 dias, a partir da data atual
#
DIR="/fileserver/"
DAT="30"
#utilizado para gerar as datas
DAT1=`date --date "$DAT day ago" | awk '{print $1" "$2" "$3}'`
DAT2=`echo $DAT1 | awk '{print $1}'`
#localiza e exclui os arquivos de acordo com os parâmetros passados
find "$DIR" -type f -exec stat -c "%n %z" {} \; | grep ".recycle" | egrep -w "$DAT1" | awk -F "$DAT2" '{print $1}'| sed 's/^/"/g ; s/ $/"/g' | xargs -replace rm
#
# recycle.sh - Utilizado para remover arquivos da lixeira do samba
#
# Autor: Saulo Fabrin <caroco@gmail.com>
#
# Este programa deve ser colocado no cron e executado todos os dias
# para remover arquivo antigos da lixeira do samba com base nos
# parâmetros "DIR" e "DAT"
#
# Onde:
#
# DIR - diretório principal onde esta localizado o .recycle
# DAT - remove os arquivos há 30 dias, a partir da data atual
#
DIR="/fileserver/"
DAT="30"
#utilizado para gerar as datas
DAT1=`date --date "$DAT day ago" | awk '{print $1" "$2" "$3}'`
DAT2=`echo $DAT1 | awk '{print $1}'`
#localiza e exclui os arquivos de acordo com os parâmetros passados
find "$DIR" -type f -exec stat -c "%n %z" {} \; | grep ".recycle" | egrep -w "$DAT1" | awk -F "$DAT2" '{print $1}'| sed 's/^/"/g ; s/ $/"/g' | xargs -replace rm
Lembrando que se o formato da data for diferente do apresentado nos exemplos acima, o script deve ser alterado conforme as suas necessidades. :)
by Saulo Fabrin
se um arquivo for antigo e for deletado, a data de modificacao se mantem
ou seja:
nao vai respeitar o prazo de 30 dias
utilizando a data de Change é respeitado o prazo
#+30 eh a quantidade de dias
find /share/.recycle -type f -ctime +30 -delete