Respostas:
Para responder diretamente à sua pergunta, "não - você não pode fazer o que descreve rm
".
Você pode , no entanto, fazê-lo você combiná-lo com find
. Aqui está uma das muitas maneiras pelas quais você pode 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 destruir todos os arquivos * ~, poderá fazer o seguinte:
# 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
find | grep | xargs rm
. Se houver arquivos com espaços (ou novas linhas), isso será interrompido (e dependendo dos nomes dos arquivos e de onde estão os espaços) pode excluir itens que você não pretendia excluir. find … -print0 | xargs -0 rm
será muito mais robusto. No entanto, isso significa que você não pode usar grep
e deve usar find
os predicados para corresponder e imprimir0 apenas os arquivos desejados. segundo exemplo de warren será mais robusto como find -type f -name '*~' -print0 | xargs -0 rm
.
"sem usar outros comandos"
Não.
Usando Bash, com globstar
set, yes :
rm basedir/**/my*pattern*
Experimente com, por exemplo ls -1
, primeiro, antes rm
de listar os arquivos correspondentes.
Você define opções através de, por exemplo shopt -s globstar
.
Como alternativa, uma find
variante mais curta :
find -type f -name 'my*pattern*' -delete
ou para GNU find
:
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 também remover diretórios, como você pedir: apenas mudança rm
em rm -r
nos comandos acima e pule correspondente na única -type f
nos find
comandos.
Eu teria aspirado "rm -rf" onde está uma combinação de nomes de arquivos e padrões correspondentes como * e? etc (por exemplo, hoje_log_2009 ????. log). Isso começará no Dir atual e funcionará para baixo, removendo recursivamente os arquivos que afetam esse padrão.
Se você usar zsh (1) , ative "globbing estendido" com setopt extendedglob
em .zshrc. Prefixar o padrão com '** /' excluirá recursivamente:
% rm -rf ** / <padrão>
No entanto, se houver muitos arquivos a serem excluídos, você deve procurar (1) com xargs (1) ou -exec, e eu também recomendo fazer isso em scripts de shell.