+ Responder ao Tópico



  1. #1
    quecosuix
    Visitante

    Padrão usando grep para deletar arquivo..

    bom dia,
    gostaria de fazer um comando com o grep que todo o arquivo que tivesse a palavra "mp3" fosse apagado..

    maneira errada que fiz...

    grep -ir mp3 * | rm {} /;

    valeu,

    Cleiton

  2. #2
    Moderador Avatar de Bruno
    Ingresso
    Nov 2002
    Localização
    Guarapuava-PR
    Posts
    3.926
    Posts de Blog
    1

    Padrão usando grep para deletar arquivo..

    vc pode fazer assim o

    find / -name *.mp3 >> /mp3

    ele ira criar um arquivo assim

    /222.mp3
    /2d22.mp3
    /22.mp3
    /mydnsche/var/www/pages/freon.com.br/home/Diversas/Menina.mp3




    ele ira procurar em todo o disco e jogar o resultado neste arquivo

    dai vc cria um exec par aapagar

    #! /bin/sh
    for apagar in `cat /mp3`; do
    rm $apagar
    done
    eu façi assim



  3. #3
    Fernando Scherrer
    Visitante

    Padrão Espaço vai atrapalhar um pouco

    Salve!

    O problema em se usar um:
    Código :
    #! /bin/sh
    for apagar in `cat /mp3`; do
    rm $apagar
    done

    é que se o nome do arquivo tiver espaço não vai funcionar (ou se tiver sorte poderá deletar outro arquivo, hehe). Acrescente um novo IFS, para que deixe de ser espaços e passe a ser quebra de linha, e também envolva o $apagar entre aspas:
    Código :
    #! /bin/sh
    IFS="
    ";
    for apagar in `cat /mp3`; do
    rm "$apagar"
    done

  4. #4

    Padrão usando grep para deletar arquivo..

    Tente utilizar:

    find / -name *.mp3 -exec rm {} \

    Mas dependendo do tamanho da saída ele pode não funcionar... e vou aproveitar para perguntar pra vocês o que pode ser o problema
    Uma vez eu impelentei esse comando para apagar arquivos de impressão gerados pelo sistema aqui da empresa que trabalho, em média de 1000/1500 arquivos diários, e não funcionou me retornando essa mensagem:
    /usr/bin/find: Too many arguments

    Não lembro exatamente a mensagem de erro, mas é algo assim, amanhã no trampo posso ver certo, se precisar.

    O que pode ser isso ? Configurações do kernel ? :?

    Para conseguir apagar os arquivos, fiz um script parecido com os dos amigos acima.
    Mas não corro o risco de nomes de arquivos com espaços ou caracteres especiais.

    Valewww



  5. #5

    Padrão usando grep para deletar arquivo..

    galera..

    adaptei um script q já tinha aqui...

    fiz alguns testes e funcionou legal....

    ----------------------------------------
    #!/bin/bash
    find / -name "*.mp3" > /root/mp3.db
    arquivo=`cat /root/mp3.db`
    lines=$(echo "${arquivo}" | wc -l)
    currline=;oldline=;
    for ((counter=1; counter <= $lines; counter=$((${counter} + 1)))); do
    currline="$(echo "${arquivo}" | head -n ${counter} | tail -n 1)"
    if [ "${currline}" != "${oldline}" ]; then
    oldline="${currline}"
    rm "${currline}"
    #echo "${currline}"
    fi
    done
    ----------------------------------------

    Obs.: Verifiquem possíveis erros neste script, não me responsabilizo por perca de dados..

    valew
    []'s

  6. #6

    Padrão usando grep para deletar arquivo..

    ahh...

    testem como outro usuário no lugar de root e alterem o diretório no script..

    assim evita-se alguma coisa errada...



  7. #7
    Super_Diaulas
    Visitante

    Padrão usando grep para deletar arquivo..

    find / -name *.mp3 > $TEMP1

    awk '{ print "rm -rf \""$0"\" ./ "}' $TEMP1 | sh


    isso resolve o problema dos espaços

  8. #8

    Padrão usando grep para deletar arquivo..

    Amigo quecosuix,

    Como não vi resposta para sua pergunta nas respostas anteriores la vai...
    Você não precisa de um script tao elaborado pra remover arquivos que contem uma determinada string

    Primeiramente digite:
    man grep
    man xargs

    Depois é simples:
    fgrep "mp3" * -rl |xargs rm -rf

    Falou!



  9. #9

    Padrão usando grep para deletar arquivo..

    Citação Postado originalmente por mvzeppelin
    Amigo quecosuix,

    Como não vi resposta para sua pergunta nas respostas anteriores la vai...
    Você não precisa de um script tao elaborado pra remover arquivos que contem uma determinada string

    Primeiramente digite:
    man grep
    man xargs

    Depois é simples:
    fgrep "mp3" * -rl |xargs rm -rf

    Falou!
    fala mvzeppelin...

    vc nao viu resposta ou não entendeu as respostas acima postadas??

    chegou pelo menos testá-las?

    para uma pergunta podem existir N respostas, algumas imples outras complexas, e outras q não funcionem...

    valew