Problema para deletar arquivos via shell script [RESOLVIDO]

13. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

Heitor Temp
htemp

(usa Fedora)

Enviado em 09/10/2012 - 22:50h

O codigo


find /home/dell/backup/moodle/ -type f -iname \*.gz -ctime +5 -print0 | xargs -0 rm -f


Retorna o seguinte erro


rm: invalid option --
Try `rm --help' for more information.


Se rodado direto no terminal funciona normalmente, excluindo os arquivos, o mesmo acontece com o código


#find /home/dell/backup/moodle/ -name '*.gz' -ctime +5 -type f -exec rm {} \;


Sempre tive dificuldades com o shell script, agora não é diferente :)

Obrigado



  


14. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 09/10/2012 - 23:19h

Você pode postar o script inteiro?


15. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 10/10/2012 - 08:43h

Aqui funcionou também com script.

Quando você digite #!/bin/bash, deveria ter um espaço entre ! e /. Ficando: #! /bin/bash. Vai ver pode ser isso. Ou tente com #! /bin/sh


16. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 10/10/2012 - 11:33h

Esse espaço entre o "#!" e o pathname do comando não é relevante. Com mais frequência o vejo omitido do que presente, inclusive nos scripts da distribuição.

Meu palpite é algum alias maluco ou outra coisa no meio do caminho.


17. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 10/10/2012 - 12:08h

paulo1205 escreveu:
Meu palpite é algum alias maluco ou outra coisa no meio do caminho.


É bem provável, já que não reconheceu o comando rm. Pior é que no terminal funciona.


18. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 10/10/2012 - 12:29h

O comando rm é reconhecido, o que não é reconhecido é o argumento -f, eu acredito que o xargs está jogando algum parâmetro como um hífen (-) ficando rm -f -foo.


19. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 10/10/2012 - 12:43h

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


20. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 10/10/2012 - 14:25h

A saída do find sempre coloca um prefixo do caminho antes do nome. Então, mesmo que exista um arquivo chamado "-f", ou mesmo " -f" (note o espaço enrte as aspas e o hífen), ele seria mostrado com "./-f" ou "./ -f". E mesmo os espaços no meio da linha não dariam problema, porque o xargs, especialmente quando usado com a opção "-0", se encarrega de garantir que eles serão passados como um único argumento.

Meus candidatos, portanto, a uma investigação nesta etapa são um possível valor indevido da variável de ambiente PATH, alguma outra variável de ambiente que afete o find ou o rm, ou algum alias ou função definidos no contexto do script que possam estar no caminho desses programas. Rodar o script com a opção "-x" ou "-x -v" do shell pode ajudar o diganóstico.

Usar o predicado "-delete", como sugerido, pode resolver, mas possivelmente ao custo de mascarar outro problema que possa estar relacionado ao comando rm. Além do mais, eu, que trabalho com outros sabores de UNIX além do Linux, costumo preferir, quando possível, usar soluções disponíveis universalmente, mas "-delete" é exclusivo do find da GNU, não existente em outros sistemas que utilizem o find original do UNIX ou derivado deste.


21. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

Heitor Temp
htemp

(usa Fedora)

Enviado em 15/10/2012 - 22:39h

_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

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.

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


22. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

Paulo
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.


23. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 22/10/2012 - 09:45h

Realmente, se for pensar em portabilidade, o argumento -delete não é uma boa opção, mas como vejo que trata de algo trivial e, você tenha uma versão de conformidade à GNU, não vejo problemas. Além dos logs, só a título de curiosidade, qual a versão do seu findutils?


24. Re: Problema para deletar arquivos via shell script [RESOLVIDO]

Heitor Temp
htemp

(usa Fedora)

Enviado em 03/07/2013 - 17:00h

Pessoal
Realmente eu não abri muitas informações pois esse servidor é um da Locaweb, primeiro não tenho muitas informações sobre o servidor e segundo que fica complicado de abrir pois é o servidor da empresa que trabalho, vocês sabem que é complicado por causa dos negócios.
Hoje eu tenho excluído manualmente, a cada segunda-feira, o que é uma droga sabendo que posso fazer isso via script pelo cron, mas deve haver restrições por parte da Locaweb.
Eu já entrei em contato com o suporte da Locaweb, mas eles desconversaram e disseram que os BDs já possuem backup, mas para fazer o restore a Locaweb cobra...
Deixo um último pedido, se alguém tiver noção do que pode ser feito nos servidores da Locaweb ou uma alternativa diferente do que o pessoal mandou (e sou muito grato por todas as dicas), que por favor poste. E se não houver eu fecho o tópico e faço na mão mesmo.
Obrigado pela ajuda de todos.

Abração!



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts