paulo1205
(usa Ubuntu)
Enviado em 16/10/2012 - 04:36h
htemp escreveu:
_di0 escreveu:
E talvez usando o parâmetro -delete seja o suficiente para você:
find /home/dell/backup/moodle/ -name '*.gz' -ctime +5 -type f -delete
evitando usar pipe e xargs
_di0, tentei esse seu script e obtive o seguinte retorno
'ind: invalid predicate `-delete
Rodando direto no terminal, funcionou
Eis aí mais uma indicação de que você pode estar com um valor indevido da variável de ambiente
PATH dentro do script, ou mesmo algum problema ainda pior (por exemplo, o script estar sendo executado noutra máquina, com uma versão diferente do
find).
Para lhe ajudar mais, ou você nos mostra todo o script, ou você terá de seguir nossas sugestões de diagnóstico mais a fundo e nos reportar o que descobrir em cada etapa. Assim, por exemplo, quando alguém lhe sugerir que investigue o valor da variável
PATH, você investiga e mostra aqui o que descobriu.
Sendo bem objetivo, no caso em questão, coloque no seu script, imediatamente antes da linha com o comando
find, o seguinte bloco de código.
( \
uname -a; \
echo =====; \
env | sort; \
echo =====; \
export POSIXLY_CORRECT=y; \
set; \
) > /tmp/temp_vol.txt
Depois de executar o script, poste aqui o conteúdo do arquivo
/tmp/temp_vol.txt.
paulo1205, não tenho muita intimidade com shell script, tentei colocar o -x -v no find mas tenho a resposta que o predicado não existe.
Faz sentido. Essas opções não são do
find, mas do shell. Eu as sugeri porque elas ligam modos de disgnóstico que fazem com que os comandos executados pelo script sejam exibidos antes de serem executados, incluindo as substituições de variáveis que porventura ocorram.
Para usar tais opções com o intuito que eu sugeri, você provavelmente terá de alterar a primeira linha do script, trocando-a de algo como
#!/bin/sh
para
#!/bin/sh -xv
.
Pessoal, por acaso não há uma outra maneira com que eu possa excluir os arquivos com um num x de dias?
Obs: os nomes dos arquivos gerados pelo script de backup ficam assim:
moodle_20121010-0300.tar.gz ou seja, moodle_aaaammdd-hhmm.tar.gz
Tem como eu transformar esse nome do arquivo em uma string e comparar via programação, levando em conta o dia atual?
Valeu pela ajuda de todos.
Abraços
Certamente há outras maneiras. Existem versões estendidas do comando
date, por exemplo, que permitem formatar uma data arbitrária, e você poderia usar isso para formar strings correspondentes às que você quer apagar/manter. Mas se as extensões do
find não funcionam quando você roda o script, por que esperar que as do
date funcionem?
Quando preciso contornar dependências de versões específicas do shell ou de outras ferramentas do sistema -- lembrando que eu não lido só com Linux, mas também com Solaris, AIX e BSD --, eu volta e meia recorro a programação em Perl ou mesmo C. Só que essa abordagem às vezes dá algum trabalho, exigindo um bloco razoavelmente grande de código para fazer a mesma coisa que se faz em uma ou duas pipelines com shell e alguns utilitários, mas é o preço a se pagar pelo controle alcançado, e às vezes vale a pena.