Script para procurar por string e remover a pasta se não encontrar a string [RESOLVIDO]

1. Script para procurar por string e remover a pasta se não encontrar a string [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/07/2009 - 11:29h

Eu estou precisando de um help em um script que gostaria de criar e gostaria de saber se alguém poderia me dar uma ajuda.

Vamos ao cenário:

Tenho um storage, onde os dados são organizados seguindo a estrutura abaixo. Nele, os dados estão armazenados em pastas cujo o nome é a data de criação.

linux:/mnt/stg_a/ # ls *
2008_06_28
2008_06_27
2008_06_28

Dentro destas pastas, estão os arquivos armazenados.

Preciso de uma forma apagar o o conteúdo destas pastas, porém seguindo as premissas:

1) Dentro das pastas, os arquivos que tiverem as palavras "vinheta" ou "santinho" no nome, não poderão ser apagados. Engloba-se Santinho , SANTINHO, VINHETA, Vinheta, VTA, vta;
2) Caso na pasta, não contenha nenhuma das excessões(arquivos com a palavra "vinheta" ou "santinho" no nome), a pasta e todo seu conteúdo podem ser apagados sem problemas.


Eu sei que entrando em cada diretório destes e rodando o comando ls | grep -v vinheta | xargs rm -rf, eu consigo remover dos os arquivos exceto os que tenham a palavra vinheta. Quando eu listo o conteúdo do diretório e não há nenhuma das exceções nele, eu o removo manualmente (rm -rf).

Preciso fazer isto, para evitar o trabalho de entrar em cada pasta e ver se tem algum arquivo que se enquadre nas excessões citadas porém não estou conseguindo uma maneira de fazer isto de forma mais automatizada.

Um abraço a todos!


  


2. Re: Script para procurar por string e remover a pasta se não encontrar a string [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 01/07/2009 - 11:51h

Pelo que entendi, vc sabe como fazer, não sabe como automatizar, certo?

Este script te ajudará.


#!/bin/sh

ls /home/backup/ > lista # le seu archive - altere para seu caminho e joga para um arquivo de lista
cat /home/backup/lista | while read linha; do # le a lista e pega o caminho
if [ -d /home/backup/$linha ]; then # verifica se o caminho é um diretorio se for executa açoes abaixo
cd /home/backup/$linha
touch a #ao inves do touch rode o comando para procura que vc cita
sleep 1 # remova
fi
done





3. Script para procurar por string em diretório

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/07/2009 - 10:41h

Ainda não funcionou. Relendo o título que eu coloquei no tópico, percebí que não fui muito claro no que eu preciso.

Tenho uma pasta que é o storage: /mnt/stg/

Dentro desta pasta de storage (/mnt/stg/), existem diversas pastas com subdiretórios:

# ls /mnt/stg/2008_07_24/
SubDir1
SubDir2
SubDir3

# ls /mnt/stg/2008_07_25/
SubDir4
SubDir5
SubDirVinheta1
SubDirSantinho10

Hoje, eu tenho que fazer o seguinte procedimento, para remover arquivos:

# ls /mnt/stg/*

Desta forma eu consigo ver todos os arquivos contidos em cada pasta:

2008_07_24/
SubDir1
SubDir2
SubDir3

2008_07_25/
SubDirDir4
SubDirDir5
SubDirVinheta1
SubDirSantinho10

Quando após a saída do ls, eu vejo que em determinada pasta não existe nenhum arquivo com estas palavras, como por exemplo a pasta /mnt/stg/2008_07_24/, eu faço o seguinte:

# cd /mnt/stg/
# rm -rf 2008_07_24

Porém quando existem arquivos com as palavras Santinho ou Vinheta, como a pasta 2008_07_25, eu faço o seguinte:

# cd /mnt/stg/
# cd 2008_07_25
# ls | grep -v Vinheta | grep -v Santinho | xargs rm -rf

O que eu gostaria de fazer:

Os diretórios onde não houvessem subpastas com a palavra SANTINHO e/ou VINHETA, como é o caso da pasta 2008_07_24, pode ser removido.

Onde houverem subdiretórios com estas palavras no nome, deve ser removido tudo, exceto estes diretórios.

Alguma sugestão ?

Eu cheguei a seguir sua orientação, fazendo o seguinte:

#!/bin/bash
ls /mnt/stg/* > lista
cat /mnt/stg/lista
if [ -d /mnt/stg/$linha ]; then
cd /mnt/stg/$linha
ls | grep -v SANTINHO | grep -v VINHETA | xargs rm -rf
fi


Porém não está apagando nada :(








4. Re: Script para procurar por string e remover a pasta se não encontrar a string [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 02/07/2009 - 12:50h

Cara, desculpa mas não estou entendendo nada, vc quer apagar ou não apagar os arquivos que contenham as referidas palavras VINHETA, SANTINHO, etc.?

se vc quer apagar, com o find comando vc apaga direto os arquivos que contenham estas palavras,

find /home/backup/dir/10 -name VINHETA -exec rm -rf {} \;



5. Script para procurar por string e remover a pasta se não encontrar a string

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/07/2009 - 13:44h

Cara,
Eu quero fazer uma busca no storage por pastas que tenham subpastas que contenham estas palavras no nome.

No resultado da busca, caso exista alguma subpasta com estas palavras no nome, eu quero apagar todo o conteúdo da pasta EXCETO as subpastas que contenham estas palavras no nome. Ou seja, não quero subpastas com estas palavras no nome.

Se a busca não encontrar nenhum resultado que tenha estas palavras no nome, pode apagar a pasta inteira.

Assim:

# /mnt/stg/2009_09_01/
|_ Vinheta
|_ SubpastaX
|_ SubpastaY

Neste caso, não quero apagar a pasta 2009_09_01, e somente as subpastas SubpastaX e SubpastaY. SEM APAGAR A PASTA VINHETA

Caso contrário:

# /mnt/stg/2009_09_02/
|_ SubpastaA
|_ SubpastaX
|_ SubpastaY

Neste caso, posso apagar toda a pasta 2009_09_02

Sacou ?



6. Re: Script para procurar por string e remover a pasta se não encontrar a string [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 02/07/2009 - 18:07h

olha, embora como verá ficou "simples", foi um excelente quebra cabeça, talvez existam meios difentes, o ideal seria o find que descrevi anteriormente invertido, mas não consegui passar varios parametros nele, como o caso das pastas santinho, vinheta, etc..

segue abaixo:

ls /home/backup/dir/dirbk > /home/backup/dir/lista
cat /home/backup/dir/lista | while read linha; do # o caminho ficou um pouco confuso pois gerei varias pastas dir e dirbk pois apagava e voltava toda hora
if [ -d /home/backup/dir/dirbk/$linha/vinheta ] || [ -d /home/backup/dir/dirbk/$linha/santinho ]; then # este if confirma se existe as pastas, adicione com o ou alguma a mais que esteja faltando, lembrando que o linux eh case sensitive e vinheta eh diferente de Vinheta
echo existe em $linha santinho ou vinheta
cd /home/backup/dir/dirbk/$linha # entra na pasta e apaga as que nao pertencem aos parametros
ls | grep -v santinho | grep -v vinheta | xargs rm -rf
else
echo nao existia em $linha e foi apagada # caso o if ja nao encontre exclui direto neste else
rm -rf /home/backup/dir/dirbk/$linha
fi
sleep 2

done

# bem é isso


uma obs, no script que vc tentou vc apagou o comando while, ou postou aqui sem, de uma olhada.

abs



7. Script para procurar por string e remover a pasta se não encontrar a string

Perfil removido
removido

(usa Nenhuma)

Enviado em 06/07/2009 - 11:25h

Cara, ficou perfeito! Era exatamente isto. Me esquecí apenas de um detalhe:
Isto tem que ser aplicado apenas a arquivos/diretórios que tenham sido criados há mais de 3 dias.
Ou seja,Onde ele remove tudo, só poderá remover tudo se tiver sido criado há mais de 3 dias, caso contrário não poderá ser removido.

Eu já ví algumas coisas sobre o find com o parâmetro -ctime, porém não sei como incorporar ao script.

Abraço e muito obrigado pela ajuda!



8. Script para procurar por string e remover a pasta se não encontrar a string

Perfil removido
removido

(usa Nenhuma)

Enviado em 06/07/2009 - 11:43h

Apenas mais uma coisa que pensei agora:

Uma maneira de independentemente de como estarem escritas as palavras protegidas, eu conseguir ler de uma única maneira.

Por exemplo: Arquivo ou ARQUIVO ou arquivo ou ArQuivo. Como fazer para ler o nome, e utilizar por exemplo o tr:

echo -n $NOME | tr a-z A-Z

Desta forma eu teria como trabalhar com tudo em caixa alta, não importando como está escrita a palavra, pois o que já for maiuscula, continuara em maiúscula, e o que não for, se tornará maiúscula.

Isto seria apenas para evitar remover arquivos errados que por um erro na digitação no nome por parte dos usuários, o script acabe não conseguindo inserir na busca.


9. Re: Script para procurar por string e remover a pasta se não encontrar a string [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 06/07/2009 - 15:25h

Cara, desculpe-me mas sem querer ser grosso, vou te dar o caminho, mas não vou fazer. já fiz bastante, né... rs,

No lugar do ls adiciona esta linha:

find /home/backup/teste/ -mmin +6 |cut -c2- # o mmin troque por mtime, mmin localiza em minuto e mtime em dias, altere o caminho para ficar igual ao que estava o ls e o cut -c2- é para remover o ponto que cria pelo comando find e não criava pelo ls, caso não consiga com -c2-, tente cut -d"/" -f5, altere o valor "5" do f, para o tanto de barras que tiver, aqui esta dizendo que é a quinta barra.

e esta linha faz a troca de minusculo para maiuscula:

for renomeia in *; do mv $renomeia `echo $renomeia| tr /[a-z]/ /[A-Z]/` ; done

Concatene as duas e pronto.

find /home/backup/teste/ -cmin +6 |cut -d"/" -f5 |for renomeia in *; do mv $renomeia `echo $renomeia| tr /[a-z]/ /[A-Z]/` ; done



10. Script para procurar por string e remover a pasta se não encontrar a string

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/07/2009 - 06:24h

Claro!
Você já me ajudou bastante! Desculpe-me por qualquer inconveniência. Muito obrigado mesmo!

Um abraço!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts