Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Limpando o .recycle do Samba
Linux user
Publicado por saulo fabrin em 12/10/2005

Login: saulofabrin, 35387 pontos
[ Hits: 6065 ]

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
 
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 2005

O 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

Para facilitar fiz o seguinte script:

#!/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

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


Outras dicas deste autor

Leitura recomendada
   Dica Linux recomendada Redimensionando e renomeamento imagens em massa
   Dica Linux recomendada Filtrando sites navegados por máquinas no log do Squid
   Dica Linux recomendada Criando certificados no Fedora Core
   Dica Linux recomendada Configurar Gedit para compilar e executar scripts em PASCAL
   Dica Linux recomendada Backup do Nagios

Comentários
[1] Comentário enviado por bisonho em 13/04/2006 - 23:53h:

Ha um problema em utilizar a data de modificacao,
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




[2] Comentário enviado por saulofabrin em 15/04/2006 - 09:13h:

Caro Bisonho
Tenha mais "CUIDADO" com os comentários, se você ler a dica corretamente vai constatar que foi utilizado o Change.

[3] Comentário enviado por tomassoni em 12/08/2009 - 17:51h:

Saulo, quando uso o comando stat da maneira que mencionou ele me retorna neste formato 2009-08-12 17:45:00.000000000 -0300 saberia me dizer se eu script funciona ou tenho que dar um jeito nessa precisão?

[4] Comentário enviado por tomassoni em 14/08/2009 - 09:13h:

Bom seguindo a lógica resolvi o meu problema assim, como tenho a pasta .lixeira e dentro dela subdiretorios para cada usuário. ficando assim:

|.lixeira
|____User01
|Dir1
|DirN

E a minha data usando stat ficava como descrito assima, deixei meu script assim:

#! /bin/bash

# Limpa shell
clear

# Url para diretorio da lixeira
ur_dir_lixo="/hd500g/.lixeira"

# Url para arquivo de log
url_dir_log="/var/log/lixeira.log";

# remove os arquivos há 10 dias, a partir da data atual
dias="10";

# Utilizado para gerar as datas dos dias antigos
data_antigo="$(date --date "$dias day ago" +%Y-%m-%d)"


# Inicia calculo tempo gasto para limpeza
DATA_LOG=`date +%a-%d-%m-%Y-%H:%M:%S`
START=$(date +%s)


# Remove arquivo de log antigo
if [ -e $url_dir_log ] ; then
rm -rf $url_dir_log
fi

echo -ne "---Inicio: $DATA_LOG\n" >> $url_dir_log


# Remove o arquivo antigo baseado na variavel dias em relacao ao dia atual
find "$ur_dir_lixo" -type f -exec stat -c "%n %z" {} \; | grep ".lixeira" | egrep -w "$data_antigo" | awk -F "$data_antigo" '{print $1}' | xargs -replace rm 2>$url_dir_log


# Finaliza calculo tempo gasto para backup
DATA_LOG=`date +%a-%d-%m-%Y-%H:%M:%S`
echo -ne "------Fim: $DATA_LOG" >> $LOG
END=$(date +%s)
DIFF=$(( $END - $START ))

if [ $DIFF != 0 ]; then
TMP=`echo "scale=2; $DIFF / 60" | bc`
fi

echo -ne "\nTempo gasto em segundos: $DIFF" >> $url_dir_log
echo -ne "\nTempo gasto em minutos: $TMP" >> $url_dir_log



exit 0;

O unico probleminha que encontrei, foi que, quando so temos apenas um arquivo dentro do diretorio ele exclui o arquivo mas mantem o diretorio.

Saulo, muito obrigado pela dica, ficou bem funcional para mim. Espero que não se importe pelos ajustes e adição do tempo gasto.





[5] Comentário enviado por cherandinho em 03/09/2009 - 14:53h:

Olá a todos, sou novo no mundo linux, e estou muito empolgado com tudo .
Estou usando o cenOS aqui , e estava com a mesma duvida em relação a precisão da data.
Vejo que a mesma não influenciou no script.
Só gostaria de parabeniza-los pela iniciativa , Saulo e tamassoni .


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.