é possível usar o rm para remover arquivos e diretórios correspondentes a um padrão recursivamente sem usar outros comandos?
unix
maintenance
rm
user15586
fonte
fonte
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 usargrep
e deve usarfind
os predicados para corresponder e imprimir0 apenas os arquivos desejados. segundo exemplo de warren será mais robusto comofind -type f -name '*~' -print0 | xargs -0 rm
."sem usar outros comandos"
Não.
fonte
Usando Bash, com
globstar
set, yes :Experimente com, por exemplo
ls -1
, primeiro, antesrm
de listar os arquivos correspondentes.Você define opções através de, por exemplo
shopt -s globstar
.Como alternativa, uma
find
variante mais curta :ou para GNU
find
:ou outra alternativa para não-GNU
find
(um pouco mais lento):Para também remover diretórios, como você pedir: apenas mudança
rm
emrm -r
nos comandos acima e pule correspondente na única-type f
nosfind
comandos.fonte
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.
fonte
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.
fonte