rm -rf .*
só não terminará horrivelmente porque rm
se recusa a excluir .
e ..
.
Como excluo esses diretórios especiais de um padrão glob?
Isso não é resolvido, dotglob
pois quero corresponder apenas os arquivos que começam com um ponto e nem todos os arquivos.
Isso deve servir:
Este comando pode capturar todos os casos.
.[^.]
irá capturar quaisquer duas entradas de caracteres..??*
corresponderá apenas a nomes de arquivo com mais de 3 caracteres.Com o bash, definir a
GLOBIGNORE
variável especial como um valor não vazio é suficiente para fazê-lo ignorar.
e..
ao expandir globs. Dos documentos do Bash :Se definirmos como
.:..
, ambos.
e..
serão ignorados. Como configurá-lo para qualquer coisa não nula também obterá esse comportamento, também podemos configurá-lo para apenas.
Então:
(Da minha resposta anterior no Ask Ubuntu .)
@Goro tem, eu acho, a resposta mais simples e totalmente correta. No entanto, acho que é uma dor de digitar. eu sugeriria em vez disso
É absolutamente verdade que isso vai perder arquivos como
.a
, mas esses são tão extraordinariamente raros que, na prática, não acho que isso importe, especialmente para uso interativo.Você precisa excluir pontos simples e duplos:
..?*
corresponde a tudo com dois pontos seguidos por qualquer coisa.[!.]*
corresponde a tudo com um único ponto não seguido por outro pontoCom
extglob
:!(.|)
corresponde a qualquer coisa, menos a um ponto ou vazio, portanto,.!(.|)
corresponde a qualquer coisa que comece com um ponto, exceto.
e..
.Com
find
, é um pouco mais para digitar, mas você pode ser mais explícito, o que facilita o entendimento:Isso chama
rm -rf
com todos os nomes no diretório atual (somente) que começam com um ponto e que não é.
nem..
. Não estou usando-delete
aqui, pois esse predicado não pode excluir diretórios não vazios.Se você deseja corresponder apenas arquivos regulares no diretório atual, fica ainda mais fácil:
Aqui, não precisamos excluir
.
ou..
como eles são excluídos automaticamente por-type f
.Altere
-type f
para! -type d
para excluir qualquer não-diretório (ou seja, links simbólicos etc.)