use rm para remover arquivos e diretórios recursivamente

17

é possível usar rm para remover arquivos e diretórios que correspondem a um padrão recursivamente sem usar outros comandos?

    
por user15586 27.10.2009 / 05:52

5 respostas

35

Para responder diretamente à sua pergunta, "não - você não pode fazer o que descreve com rm ".

Você pode , no entanto, combine com find . Aqui está uma das muitas maneiras de fazer isso:

 # search for everything in this tree, search for the file pattern, pipe to rm
 find . | grep <pattern> | xargs rm

Por exemplo, se você quiser eliminar todos os arquivos *, você pode:

 # the $ anchors the grep search to the last character on the line
 find . -type f | grep '~'$ | xargs rm

Para expandir a partir de um comentário * :

 # this will handle spaces of funky characters in file names
 find -type f -name '*~' -print0 | xargs -0 rm
    
por 27.10.2009 / 06:09
8

"sem usar outros comandos"

Não.

    
por 27.10.2009 / 17:34
3

Usando o Bash, com globstar definido, sim :

rm basedir/**/my*pattern*

Experimente com, por exemplo ls -1 primeiro, antes de rm listar os arquivos que você corresponde.

Você define opções por meio de shopt -s globstar .

Como alternativa, uma variante find mais curta:

find -type f -name 'my*pattern*' -delete

ou para% GNUfind:

find -type f -name 'my*pattern*' -exec rm {} +

ou outra alternativa para não-GNU find (um pouco mais lento):

find -type f -name 'my*pattern*' -exec rm {} \;

Para remover também os diretórios, como você pede: apenas altere rm para rm -r nos comandos acima e pule a correspondência somente em -type f nos comandos find .

    
por 16.05.2012 / 15:44
0

Eu teria asuumed "rm -rf", onde há uma combinação de nomes de arquivos e padrões de correspondência, como * e? etc (por exemplo, todays_log_2009 ????. log). Isso iniciará a partir do diretório atual e funcionará de forma recursiva, removendo arquivos que macquem esse padrão.

    
por 07.11.2009 / 17:56
0

Se você usar zsh (1) , ative "extended globbing" com setopt extendedglob em .zshrc. Prefixar o padrão com '** /' será excluído recursivamente:

% rm -rf ** / < padrão >

No entanto, se houver muito de arquivos para excluir, você deve recorrer a encontrar (1) com xargs (1) ou - exec, e eu também recomendo fazer isso em scripts de shell.

    
por 24.05.2013 / 10:03