Como apagar todos os arquivos e diretórios ocultos usando o Bash?

26

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 .??*
    
por Yonatan Broza 30.07.2009 / 10:37

4 respostas

32
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 ..).

    
por 30.07.2009 / 10:58
1
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.

    
por 10.11.2015 / 11:21
0

A melhor maneira provavelmente é:

  • encontre. -iname. * -maxdepth 1 -tipo f -exec rm {} \;

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

  • As opções -type f informam o comando find para procurar apenas pelos arquivos (omitir dirs, links etc)
  • -maxdepth 1 diz encontrar para não ir para subdiretórios

ps. não se esqueça de terminar '\;'

    
por 14.09.2009 / 17:26
-1
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.
    
por 04.08.2017 / 13:35