rm -rf .[^.] .??*
Deve pegar todos os casos. O arquivo. ?? * irá corresponder apenas a 3 + nomes de caracteres (como explicado na resposta anterior), o. [^.] Irá capturar quaisquer entradas de dois caracteres (exceto ..).
A solução óbvia produz um código de saída de 1:
bash$ rm -rf .*
rm: cannot remove directory '.'
rm: cannot remove directory '..'
bash$ echo $?
1
Uma possível solução irá ignorar o "." e ".." diretórios, mas só excluirá arquivos cujos nomes são maiores que 3 caracteres:
bash$ rm -f .??*
find -path './.*' -delete
Isso corresponde a todos os arquivos no diretório atual que iniciam com .
e os excluem recursivamente. Arquivos ocultos em diretórios não ocultos não são tocados.
Caso você realmente queira apagar tudo de um diretório, find -delete
seria suficiente.
A melhor maneira provavelmente é:
altere rm para ls -l se quiser apenas ver o que seria excluído, para verbose a saída u pode querer adicionar a opção -v para rm
ps. não se esqueça de terminar '\;'
ls -la | awk '$NF ~ /^\.[^.]+/ {print $NF}' | xargs rm -rf
ls -la ............. long list (all files and folders)
$NF ................ last field (file or folder name)
~ ................ Regular Expression match
/^\.[^.]+/ ......... dot followed by not dot at least once +
If the last field $NF match pattern show it and send
it to xargs which will perform the task.