+ Responder ao Tópico



  1. #1

    Padrão Find e várias extensões

    Bom dia galera, fiz um script pra retirar arquivos tipo MP3, WMA, WMV e coisas dos tipo.
    a sintaxe que estou usando é a seguinte:

    find /diretório -type f -name "*.mp3" -delete > /dev/null
    find /diretório -type f -name "*.MP3" -delete > /dev/null


    o que eu quero fazer é uma coisa tipo assim:

    find /diretório -type f -name "*{.mp3,.MP3,.mp4,.MP4}" -delete > /dev/null

    ou seja colocar várias extensõe em uma linda de código, só que já fiz o teste e não funciona, alguem já fez algo parecido que pudesse me ajudar????

  2. #2

    Padrão

    Bom dia,

    Bom .... existe várias soluções para o seu problema , só não entendi de onde que vc arranjou este -delete ai... nunca usei... se puder explicar...

    Segue uma solução possível para o seu caso de busca

    Código :
    find teste/ -type f -name *.'[A-Za-z][A-Za-z][A-Za-z1-9]' | xargs rm -rf
    # Neste caso faz a busca de três caractesres seja maíuscula ou minúscula, e o último carctere checa se tem dígito e depois apaga os resultados encontrados
    find teste/ -type f -name *.'[m-Mw-W][m-Mp-P][a-A1-9]'
    # Pode ser mais expecífico como este acima, q atende no caso tanto maiuscula ou minúscula as extensões mp de 1 a 9 e wma

    Achei esta ER meio porca.... vou ver se melhoro

    Qualquer dúvida poste...

    Abço
    Filipe
    Última edição por tricolor; 04-01-2010 às 11:19.

  3. #3
    Não Registrado
    Visitante

    Exclamation Estrou colocando o script ai pra voce ver....

    Este é o que esta funcionando hoje:

    #!/bin/bash
    find /tbusuarios/Tentbeach -type f -name "*.mp3" -delete
    find /tbusuarios/Tentbeach -type f -name "*.MP3" -delete
    find /tbusuarios/Tentbeach -type f -name "*.mp4" -delete
    find /tbusuarios/Tentbeach -type f -name "*.MP4" -delete
    find /tbusuarios/Tentbeach -type f -name "*.avi" -delete
    find /tbusuarios/Tentbeach -type f -name "*.AVI" -delete
    find /tbusuarios/Tentbeach -type f -name "*.wma" -delete
    find /tbusuarios/Tentbeach -type f -name "*.WMA" -delete
    find /tbusuarios/Tentbeach -type f -name "*.wmv" -delete
    find /tbusuarios/Tentbeach -type f -name "*.WMV" -delete
    find /tbusuarios/Tentbeach -type f -name "*.wav" -delete
    find /tbusuarios/Tentbeach -type f -name "*.WAV" -delete
    find /tbusuarios/Tentbeach -type f -name "*.MOV" -delete
    find /tbusuarios/Tentbeach -type f -name "*.mov" -delete
    find /tbusuarios/Tentbeach -type f -name "*.mpg" -delete
    find /tbusuarios/Tentbeach -type f -name "*.MPG" -delete
    find /tbusuarios/Tentbeach -type f -name "*.mpeg" -delete
    find /tbusuarios/Tentbeach -type f -name "*.MPEG" -delete
    find /tbusuarios/Tentbeach -type f -name "*.flv" -delete
    find /tbusuarios/Tentbeach -type f -name "*.FLV" -delete

    o que eu gostarias de fazer:

    diretorios="/tbusuarios"
    find $diretorios -type f -name "*.{mp3,wav,mp4}" -delete > /dev/null

    Não sei se compreendeu, e a definição delete encontrei no manual:

    ACTIONS

    -delete
    Delete files; true if removal succeeded. If the removal failed,
    an error message is issued. Use of this action automatically
    turns on the '-depth' option.

  4. #4

    Padrão

    Porco.... Tudo bem, mais resolvel o que eu prentendia, agora eu quero melhorar, por isso estou pedindo ajuda aqui.

    o que eu uso hoje:
    #!/bin/bach

    find /tbusuarios/Tentbeach -type f -name "*.MP3" -delete
    find /tbusuarios/Tentbeach -type f -name "*.mp4" -delete
    find /tbusuarios/Tentbeach -type f -name "*.MP4" -delete
    find /tbusuarios/Tentbeach -type f -name "*.avi" -delete
    find /tbusuarios/Tentbeach -type f -name "*.AVI" -delete
    find /tbusuarios/Tentbeach -type f -name "*.wma" -delete
    find /tbusuarios/Tentbeach -type f -name "*.WMA" -delete
    find /tbusuarios/Tentbeach -type f -name "*.wmv" -delete
    find /tbusuarios/Tentbeach -type f -name "*.WMV" -delete
    find /tbusuarios/Tentbeach -type f -name "*.wav" -delete
    find /tbusuarios/Tentbeach -type f -name "*.WAV" -delete
    find /tbusuarios/Tentbeach -type f -name "*.MOV" -delete
    find /tbusuarios/Tentbeach -type f -name "*.mov" -delete
    find /tbusuarios/Tentbeach -type f -name "*.mpg" -delete
    find /tbusuarios/Tentbeach -type f -name "*.MPG" -delete
    find /tbusuarios/Tentbeach -type f -name "*.mpeg" -delete
    find /tbusuarios/Tentbeach -type f -name "*.MPEG" -delete
    find /tbusuarios/Tentbeach -type f -name "*.flv" -delete
    find /tbusuarios/Tentbeach -type f -name "*.FLV" -delete

    o que eu queria fazer é assim:
    #!/bin/bash
    diretorios="/tbusuarios"
    find $diretorios -type f -name "*.{mp3,wav,mp4}" -delete > /dev/null

    e a definição do delete eu encontrei no manual

    ACTIONS
    -delete
    Delete files; true if removal succeeded. If the removal failed,
    an error message is issued. Use of this action automatically
    turns on the '-depth' option.

  5. #5

    Padrão

    Cara,

    Deveria funcionar com group (), mas pelo visto o find não está aceitando esta ER q eu tentei, ou eu não soube fazer da maneira correta... ve se isso não fica interessante pra vc ....

    Código :
    #!/bin/bash
    Diretorio=/teste
    T=( mp3 MP3 mp4 MP4 wma WMA avi AVI ) # Vetor T
    i=7 
    # Contador, se vc quiser deixar inteligente eh só contar qtos entradas existem no vetor e atribuir no contador
     
    for i in $( seq 0 7 ); do
            find $Diretorio -type f -name *.${T[$i]} | xargs rm -rf
    done

    Ai vc vai adicionando as extensões q vc quer no vetor

  6. #6

    Padrão

    Cara fincionou perfeitamente, é que sou auto didata e sabe que esse tipo de gente sofre pra apernder, mais muito obrigado pela ajuda vou estudar mais sobre shell script. Muito obrigado mesmo pela ajuda.

  7. #7

    Padrão

    Bom dia, o amigo acima já te ajudou, mas acho que o que você queria era isso aqui:

    $ find /diretorio -regextype posix-egrep -iregex '.*\.(mp3|wma)' -exec rm -f {} \;

    Fonte: Linux: Comando find: expressões regulares e exclusão de diretórios [Dica]

    Abraços, t+
    Última edição por robsonlula; 28-01-2010 às 09:16.