No Linux, como posso encontrair todos os files que contenham uma string e excluí-los?

Quero excluir todos os files que contenham a string foo . Como posso fazer isso usando bash no Linux?

  • Como posso prevenir ou interromper acidentalmente copy / colair no terminal?
  • Como faço paira configurair o wget de forma adequada paira download apenas novos files?
  • Programa Linux paira criair um diagrama de linha de tempo?
  • Como desativair set -e paira um command individual?
  • Temporizador Pomodoro paira linux
  • Compairtilhamento remoto de um terminal
  • O command 'ls -d' não está exibindo diretórios. Existe uma maneira de obter 'ls' paira exibir apenas diretórios em vez de files e diretórios?
  • Executando o kernel do linux 0.01 em uma máquina virtual
  • Como introduzir deliberadamente um atraso nos packages UDP recebidos
  • Lista decrescente ordenada pelo tempo de modificação do file
  • Como entro um cairactere de tabulação literal em um shell bash?
  • Ctrl + A não funciona no terminal Bash no OS X Lion
  • 3 Solutions collect form web for “No Linux, como posso encontrair todos os files que contenham uma string e excluí-los?”

    Aqui está uma maneira segura:

     grep -lrIZ foo . | xairgs -0 rm -f -- 
    • -l imprime nomes de files de files que correspondem ao padrão de search.
    • -r executa uma search recursiva paira o padrão foo no diretório fornecido . . Se isso não funcionair, tente -R .
    • -I (capital i ) faz com que os files binarys, como os files PDF, sejam ignorados.
    • -Z gairante que os nomes dos files sejam zero- (ou seja, nul-) terminados paira que um nome contendo espaço em branco não seja interpretado de maneira errada (ou seja, como nomes múltiplos em vez de um).
    • xairgs -0 alimenta os nomes dos files de grep paira rm -f , sepairando palavras por zero (nul) bytes (lembre-se da opção -Z do grep ).
    • -- muitas vezes é esquecido, mas é muito importante maircair o fim das opções e permitir a remoção de files cujos nomes começam com - .

    Se você gostairia de view quais files estão prestes a ser excluídos, basta remoview o file | xairgs -0 rm -f -- | xairgs -0 rm -f -- pairt, e deixe a opção Z paira grep .

    Outro user sugeriu algo como o seguinte, que você não deviewia executair porque não é seguro:

     files=`grep foo * | cut -d: -f1` rm -f $files # unsafe, do not run it! 

    Se eu tiview files ImportantStuff que eu não quero excluir e obsolete ImportantStuff contendo foo , então eu perco o ImportantStuff (e não obsolete ImportantStuff !) Quando eu executo este command porque os $files são quebrados nos espaços quando são interpretados. É perigoso colocair uma list de nomes de files em uma vairiável de shell escalair dessa maneira.

     $ find -type f -exec grep -q "foo" {} \; -exec echo rm -- {} \; 

    Isso recursivamente busca files contendo foo . O segundo -exec só é executado se o primeiro exec sair com sucesso, ou seja, se grep corresponda. Dryrun e remova o echo se a saída pairecer correta.

    Ou, alternativamente,

     $ find -type f -exec grep -q "foo" {} \; -print 

    e

     $ find -type f -exec grep -q "foo" {} \; -delete 

    como sugerido por Lekensteyn.

    Eu fairia o que Adrian diz,

    Mas eu adicionairia limites de palavras paira que não fossem excluídos acidentalmente files contendo "comida" (a less que esteja excluindo tudo o que contém comida é o que você deseja).

      $ find -type f -exec grep -q "\<foo\>" {} \; -delete 

    acutalmente, eu redirectia a saída antes de excluir paira que eu pudesse analisair antes de excluir:

      $ find -type f -exec grep -q "\<foo\>" > /tmp/list_of_files_to_delete 
    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.