Problema para deletar arquivos via shell script [RESOLVIDO]

1. Problema para deletar arquivos via shell script [RESOLVIDO]

Heitor Temp
htemp

(usa Fedora)

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

Boa tarde.

Estou com um problema em um script para eliminar arquivos com mais de 7 dias.
Testei algumas dicas aqui do fórum porém sem sucesso.
Segue meu código


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


Obrigado.
Heitor


  


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

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 08/10/2012 - 18:35h

E qual é o problema retornado mesmo?


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

Heitor Temp
htemp

(usa Fedora)

Enviado em 08/10/2012 - 20:53h

É o seguinte: eu tenho um script que gera o backup de uma base de dados MySQL. Esse backup é executado pelo cron todos os dias às 2 da manhã.
Eu gostaria de fazer um script que apagasse as versões do backup com mais de 7 dias.
Utilizei o código acima para que faça isso porém ele retorna o seguinte erro:
find: missing argument to `-exec'

Tentei várias alternativas que encontrei aqui no fórum para esse propósito porém não obtive sucesso.
Obs: esse script roda na Locaweb
Obrigado


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

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 08/10/2012 - 21:14h

No lugar do -exec rm {} \; pode usar find ~/user -name palavra* | xargs rm


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

Heitor Temp
htemp

(usa Fedora)

Enviado em 08/10/2012 - 22:56h

rei_astro, como esse seu comando, como eu posso excluir apenas os arquivos com mais de 7 dias?


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

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 09/10/2012 - 08:25h

htemp escreveu:

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



Ora, os arquivos de 7 dias são retornados pelo find. O comando executa rm para cada arquivo retornado. é só substituir -exec rm {} \; por | xargs rm. Ficando assim:
find /home/dell/backup/moodle/ -name '*.gz' -ctime +5 -type f | xargs rm 


Mas para quê o -type f?


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

Heitor Temp
htemp

(usa Fedora)

Enviado em 09/10/2012 - 09:01h

Bom dia, tentei o código que me enviaste, porém segue o seguinte erro ocorrido:

: No such file or directory


Tentei, para testar se realmente o script não encontrava os arquivos, o código abaixo. Porém ao rodar o script é criado o arquivo teste.txt com o nome dos arquivos com mais de 5 dias, sem problemas

#!/bin/bash
find /home/dell/backup/moodle/ -name '*.gz' -ctime +5 -type f > teste.txt


Eu defini o arquivo como executável, será que esqueci de mais algo? O que pode estar errado?

Obrigado


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

Perfil removido
removido

(usa Nenhuma)

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


O linux possui 3 estampas de tempo em arquivos.

atime, ctime e mtime.

As pessoas entendem rápido o que é atime - data do último acesso, basta uma leitura (read) mesmo que nada seja modificado para mudar o valor atime.


A confusão fica com ctime e mtime.


ctime é a data de criação do inode enquanto mtime é a data de modificação do conteúdo do arquivo.

Resumindo, mtime muda quando você "grava" no arquivo. OU SEJA mtime é a data de nascimento do arquivo que define a sua IDADE.

Observe que vou criar um arquivo com mtime modificado.

#touch --time=mtime -t 201210041400 lucas.txt

Agora olha a listagem longa dele

root@positivo:~/testes# ls -l lucas.txt
-rw-r--r-- 1 root root 0 Out 4 14:00 lucas.txt

Para ver esses 3 tempos de seu arquivo faça

root@positivo:~/testes# stat lucas.txt
File: "lucas.txt"
Size: 6 Blocks: 8 IO Block: 4096 arquivo comum
Device: 801h/2049d Inode: 252476 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2012-10-09 09:56:23.000000000 -0300
Modify: 2012-10-04 14:00:00.000000000 -0300
Change: 2012-10-09 10:01:25.000000000 -0300


Observe que atime e ctime tem data de hoje

Para mudar com touch faça assim....

Change access and modification time to particular timestamp

The following example changes the access and modify timestamp to 15th June 13:30 using touch -t option.

Format for touch -t is : [[CC]YY]MMDDhhmm[.ss]


Olha o funcionamento com os exemplos que fiz abaixo

root@positivo:~/testes# ls -la
total 20
drwxr-xr-x 2 root root 4096 Out 9 10:03 .
drwx------ 4 root root 4096 Out 9 09:51 ..
-rw-r--r-- 1 root root 6 Dez 31 2000 jose.txt
-rw-r--r-- 1 root root 0 Out 4 14:00 lucas.txt
-rw-r--r-- 1 root root 6 Dez 31 2000 maria.txt
-rw-r--r-- 1 root root 24 Out 9 09:51 nomes.txt

Agora a pesquisa com find...

root@positivo:~/testes# find /root/testes/ -maxdepth 1 -mtime +6 -type f

/root/testes/maria.txt
/root/testes/jose.txt



Espero que ajude a resolver... Por favor faça testes antes de por em produção com arquivos reais...




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

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 09/10/2012 - 18:27h

htemp escreveu:

: No such file or directory



Isso ocorre se o nome do arquivo tem mais de uma palavra.

Tente com nomes simples.

find /home/dell/backup/moodle/ -name '*.gz' -ctime +5 -type f | xargs rm 



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

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 09/10/2012 - 18:44h

O engraçado é que aqui o primeiro comando funcionou:

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


Já tentou manualmente se dá certo?


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

Paulo
paulo1205

(usa Ubuntu)

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

Eu colocaria as chaves entre aspas, no caso do predicado "-exec" do find.

Já usando xargs, se o arquivo tiver uma quebra de linha no nome (que é atípico, mas possível), é bom usar a opção "-0" do xargs, junto com o predicado "-print0" do find.

find /dir -type f -iname \*.gz -ctime +5 -print0 | xargs -0 rm -f 



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

Heitor Temp
htemp

(usa Fedora)

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


Já tentou manualmente se dá certo?

Dá certo sim, só não tá rodando via shell script, direto no terminal funciona



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts