[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Rotina de limpeza da pasta .recycle do samba



Eu criei um script com a mesma finalidade, adapte às suas necessidades
e reutilize :
#!/bin/bash
#######################################
# Limpando as lixeiras                #
#######################################
clear
maxage=5
data_ini=`date +%d-%m-%Y`
backup_title="lixeira-$data_ini"
file_log="/var/log/lixeira/$backup_title.log"
data_ini=`date +%d-%m-%Y+%H:%M`
lixeira[0]="/home/vol/almox/.recycle/"
lixeira[1]="/home/vol/mktg/.recycle/"
lixeira[2]="/home/vol/equipa/.recycle/"
lixeira[3]="/home/vol/vendas/.recycle/"
lixeira[4]="/home/vol/obras/.recycle/"
lixeira[5]="/home/vol/rh/.recycle/"
...
lixeira[20]="/home/vol/rudd/.recycle/"

# Preparando arquivo de log
echo "Limpando as lixeiras na rede em $data_ini">$file_log
echo "com idade maxima de $maxage dias atras">>$file_log

# Iniciando processo
clear
echo "Limpando as lixeiras na rede em $data_ini"
echo "com idade maxima de $maxage"

for k in "${lixeira[@]}";
do
 echo "Verificando a lixeira $k"
 echo "Verificando a lixeira $k">>$file_log

 # procura todos os arquivos antigos de cada lixeira
 pasta_lixo=`find $k -atime +$maxage`;
 for old_files in $pasta_lixo;
 do
   if test -a "$old_files" ; then
     echo "excluindo o arquivo $old_files" ;
     echo "  $old_files" >>$file_log
     rm -f "$old_files"
   fi
 done
 # experimentando limpar todos os diretorios vazios
 # serao executados 5 vezes sobre o mesmo diretorio
 # pensando na possibilidade de nao haver 5 subdiretorios
 # como o nivel mais profundo
 find $k -type d -empty | xargs rmdir -p --ignore-fail-on-non-empty
 find $k -type d -empty | xargs rmdir -p --ignore-fail-on-non-empty
 find $k -type d -empty | xargs rmdir -p --ignore-fail-on-non-empty
 find $k -type d -empty | xargs rmdir -p --ignore-fail-on-non-empty
 find $k -type d -empty | xargs rmdir -p --ignore-fail-on-non-empty
done

# Finalizando a operacao
data_ini=`date +%d-%m-%Y+%H:%M`
echo "Terminada a limpeza na rede em $data_ini"

# Finalizando o arquivo de log
echo "Terminada a limpeza na rede em $data_ini" >>$file_log

Em 25/06/07, Debian<pedro_debian@yahoo.com.br> escreveu:

 Olá Sérgio,

 Na verdade eu já tinha tentado isso, mas no caso o problema está na hora
que a linha do txt e jogada para a a variável e dele encarar o espaço em
branco entre as palavras (mesmo que o inicio e o fim tenham aspas) como um
caractere de fim de linha.

 Eu também entrei no txt e coloquei manualmente as aspas nos nomes
compostos, mesmo assim não funcionou.

 Se souber outra dica por favor me mande.

 Abraço

 Pedro
 Sérgio Pinheiro escreveu:


Olá Pedro, blz ?

Coloca a variável entre aspas que funciona.

find "$limpar" -type f -mtime 15 -exec rm -rf {} \;

Se quiser fazer um teste, faz assim:

mkdir "isso é um teste"

e depois entre no diretório pela tecla TAB.

cd iss TAB

E você verá que funciona.

Abraços,

Sérgio.



----- Original Message -----
From: Debian
To: debian-portuguese
Sent: Monday, June 25, 2007 11:46 AM
Subject: Rotina de limpeza da pasta .recycle do samba

 Olá pessoal,

 Trabalho com o samba 3.x na rede e configurei o sistema para que crie uma
lixeira para cada compartilhamento existente no sistema.
 Consultando a net consegui uma rotina para limpar os arquivos que estejam
em um determinado tempo na lixeira.
 find /compartilhamento/.recycle/ -type f -mtime 15 -exec rm -rf {} \;
 O unico problema é que tenho que criar uma linha para cada compartilhamento
existente. Então resolvi fazer uma rotina que liste todas as pastas .recycle
do sistema e jogar para um txt e em cima dele rodar uma rotina com um for
que leia o arquivo txt carregando o caminho das pastas .recycle do txt para
uma variável e substituindo na rotina de limpeza das pastas:
 find / -type d |grep .recycle > /tmp/lixo.txt # localiza todas pastas
recycle e grava seu caminho no arquivo txt
 for limpar in `cat /tmp/lixo.txt` # carrega cada linha para a variavel
limpar
 do
     find $limpar -type f -mtime 15 -exec rm -rf {} \; # executa o comando
sobre o caminho contido na variável limpar
 done

 A rotina funciona bem, porém tenho um problema. Alguns nomes de pastas
compartilhadas possuem espaço e qdo estas são carregadas do arquivo txt para
variável limpar cada palavra separada é interpretada como uma pasta
diferente. Ex:

 /nome da pasta./recycle
 é interpretada como:

 find /nome -type f -mtime 15 -exec rm -rf {} \;
 find /da -type f -mtime 15 -exec rm -rf {} \;
 find /pasta/.recycle -type f -mtime 15 -exec rm -rf {} \;

 Uma solução seria substituir o nome das pastas, mas muitas delas armazenam
planilhas que possuem vínculos para estas pastas, logo, isso teria que ser
refeito manualmente. Portanto, gostaria de saber se alguém pode me dar uma
dica de como fazer com que a rotina interprete os nomes compostos das pastas
de forma correta. Eu pensei em incluir aspas nos arquivo txt no inicio e no
final da linha, mas não sei como fazer isso de forma automática.

 Se alguém puder ajudar eu agradeço desde já.

 Muito obrigado

 Pedro


 -- To UNSUBSCRIBE, email to
debian-user-portuguese-REQUEST@lists.debian.org with a
subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org



Reply to: