Script especifico para deletar arquivos por partes de nome [RESOLVIDO]

1. Script especifico para deletar arquivos por partes de nome [RESOLVIDO]

Loro
lorosp

(usa Red Hat)

Enviado em 03/03/2016 - 15:19h

Boa Tarde

Aqui no trabalho me deparei com a seguinte situação:

Após 6 anos em funcionamento, as máquinas de automação já tem milhares de imagens (JPG) de processos efetuados ao longo desses anos,
o caso é que; a cada processo é gerada uma imagem e enviada ao servidor por FTP, mas mantém as imagens em uma pasta nestas máquinas.

Hoje cada máquina que possuem 100GB só para as imagens estão á beira de 90% de espaço utilizado.

Pois bem, como a integradora do sistema não nos dá mais suporte, a solução que encontrei foi, aos poucos ir apagando estas imagens em cada disco destas máquinas.

Utilizando o comando:

[code]for a in *200901*; do rm -f $a; done[code]

onde no nome do arquivo: 0030000131155200901080003278185A_0.jpg o 200901 se refere ao ano e mês da imagem, na sequencia tem o dia.

quando executo este comando, acontece de apagar também arquivos de 2016 e que contenham o 2009 em uma outra posição do nome,
seria possível especificar a posição que marquei no exemplo acima ao efetuar o comando rm?

Já utilizei o [2009] e também não funcionou, continuou apagando arquivos de 2016.

Agora vejam, são 7 anos de imagens para apagar, pensei em ajustar este comando para montar um script e executa-lo sem causar travamento nas máquinas.

Alguém já passou por isso?

Agradeço o auxílio antecipadamente.

Loro






  


2. Re: Script especifico para deletar arquivos por partes de nome

Wellington
wellington_r

(usa Debian)

Enviado em 03/03/2016 - 16:11h

Geralmente uso find com exec rm ou com o xargs pra fazer isso.

Nunca tentei da forma que você fez, mas deve funcionar também.

O problema é que como tem um asterisco no fim e outro no começo, em qualquer lugar que tiver essa sequência 200901 ele apaga o arquivo.
O que dá pra fazer é colocar o curinga ? que equivale a apenas um caracter.
Exemplo:

for a in ?????????????200901*; do rm -f $a; done


Provavelmente deve ter uma maneira mais "elegante" de fazer isso ao invés de colocar 13 interrogações, mas assim funciona também.


3. Re: Script especifico para deletar arquivos por partes de nome [RESOLVIDO]

Wellington
wellington_r

(usa Debian)

Enviado em 03/03/2016 - 16:15h

Por favor, para fazer teste, utilize outro comando não-nocivo no lugar do rm, como ls, por exemplo.


4. Re: Script especifico para deletar arquivos por partes de nome [RESOLVIDO]

Renan Arantes
R3nan

(usa Debian)

Enviado em 03/03/2016 - 16:22h

pq vc não apaga os arquivos mais antigos

https://www.vivaolinux.com.br/dica/Apagando-arquivos-antigos


5. for a in é mais rápido

Loro
lorosp

(usa Red Hat)

Enviado em 03/03/2016 - 16:29h

Wellington_r

Vou testar numa máquina aqui, posso usar o rm sem medo pois os arquivos já estão em backup.

Pelo que entendi eu coloco o ? para cada dígito antes do 200901* e assim ele identificará somente pela data no nome mesmo.

Obrigado pela ajuda.

Funcionando posto o resultado aqui.


6. Re: Script especifico para deletar arquivos por partes de nome [RESOLVIDO]

Loro
lorosp

(usa Red Hat)

Enviado em 03/03/2016 - 16:33h

R3nan

Boa tarde

Valeu pela dica, mas são milhares de arquivos e o find trava a máquina quando executado, e demora muito.

Já tinha tentado com o comando

FILENAME=FILES_$(date +%Y%m).jpg
find . -mtime +30 -exec echo {} \; > $FILENAME
rm -rfv $(cat $FILENAME)


Agradeço pela ajuda

Valeu.


7. Re: Script especifico para deletar arquivos por partes de nome

Wellington
wellington_r

(usa Debian)

Enviado em 03/03/2016 - 16:44h

lorosp escreveu:

Wellington_r

Vou testar numa máquina aqui, posso usar o rm sem medo pois os arquivos já estão em backup.

Pelo que entendi eu coloco o ? para cada dígito antes do 200901* e assim ele identificará somente pela data no nome mesmo.

Obrigado pela ajuda.

Funcionando posto o resultado aqui.


O ? significa "qualquer carácter (único).
O * significa "qualquer carácter ou sequência de carácter".

Se uma pasta tiver
teste123.txt
arquivodeteste123.txt
abc123.txt
def123.txt

Se quero remover apenas os arquivos
abc123.txt
def123.txt

Executo: rm ???123.txt

Se executar: rm *123.txt, ele vai remover todos.


8. Re: Script especifico para deletar arquivos por partes de nome [RESOLVIDO]

Loro
lorosp

(usa Red Hat)

Enviado em 03/03/2016 - 16:49h

Beleza, wellington_r

Geralmente utilizava o * porque só havia um tipo de nome de arquivo e a diferença era nas datas de geração de arquivo.

Mais uma que aprendi.

Entre backups e movimentação de arquivos não precisei utilizar o curinga, mas agora já posso pensar em fazer scripts melhores e mais produtivos.

Muito obrigado mesmo.




9. Re: Script especifico para deletar arquivos por partes de nome [RESOLVIDO]

Loro
lorosp

(usa Red Hat)

Enviado em 03/03/2016 - 17:46h

Funcionou legal.

Agradeço wellington_r e R3nan pela atenção.

Wellington_r acertou na mosca, com a especificação dos caracteres pelo coringa " ? " oragnizei o script por ano, que executa cada mês por vez, tornando a execução de rm -f em
milhares de arquivos ( são 7 anos gravando estes arquivos .jpg) bem mais rápida e suave não comprometendo o funcionamento das máquinas.

Muito Obrigado.








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts