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 rmserá muito mais robusto. No entanto, isso significa que você não pode usar grepe deve usar findos 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 globstarset, yes :
rm basedir/**/my*pattern*
Experimente com, por exemplo ls -1, primeiro, antes rmde listar os arquivos correspondentes.
Você define opções através de, por exemplo shopt -s globstar.
Como alternativa, uma findvariante 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 rmem rm -rnos comandos acima e pule correspondente na única -type fnos findcomandos.
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 extendedglobem .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.