Existe uma maneira de fazer um 'ls -R | grep “aname” * | rm; remover vários arquivos em vários diretórios

6

Eu instalei esmeralda (compilada). O comando make uninstall não funcionou (não há makefile, pois é apenas um script). Então decidi remover o arquivo manualmente. Mas havia muitos arquivos.

Eu tentei algumas coisas, mas não funcionou. Então eu vim aqui para pedir alguns conselhos.

  • Existe um comando com ls -R | grep blabla* que eu possa adicionar ao diretório de arquivos de exibição (ele exibe apenas o nome do arquivo)
  • Existe um verdadeiro ls -R | grep bla* | rm ?
por Cyclic 17.01.2012 / 03:37

3 respostas

6

Se 'aname' for a parte inicial do nome do arquivo, ele será, a partir do diretório atual:

find -name "aname" -delete 

Btw .:

grep "bla"* somewhere

é quase sempre falso, já que o grep já faz correspondências parciais, ou seja, encontra bla, blafasel e xybla simplesmente

grep bla somewhere

Excluímos a parte mais antiga da resposta devido a mal-entendidos:

No diretório atual, se você procurar a palavra 'aname' em todos os arquivos, basta usar:

find -exec grep "aname" {} ";" -delete 

    
por user unknown 17.01.2012 / 13:15
4

O que você está procurando é uma combinação de xargs , find e rm .

find fará uma lista de todos os arquivos correspondentes às suas condições e, em seguida, os gravará (com terminação nula) em stdout , que serão canalizados para xargs . xargs terá as sequências terminadas com nulo e as usará como argumentos para rm .

find -L /path/to/dir -name "*name*" -print0 |xargs -0 -r  rm

fonte: link

    
por Huckle 17.01.2012 / 03:46
0

Entre as outras respostas: você pode invocar rm sem precisar do programa xargs . Na verdade, você geralmente pode usar a opção exec para find em vez de xargs .

Para invocar rm o menor número de vezes possível em grandes lotes de arquivos:

find /path/to/dir -name "*name*" -exec rm {} +

Para invocar rm uma vez para cada arquivo:

find /path/to/dir -name "*name*" -exec rm {} ";"

Também há opções mais elaboradas para find que serão alteradas para o diretório antes de executar o comando.

    
por Simon Clarkstone 14.09.2016 / 00:18