Como remover todos os arquivos de um diretório?

215

O mais próximo que eu cheguei é

# rm /path/to/directory/*.*

mas isso não funciona para arquivos que não têm uma extensão ...

    
por user784637 06.09.2011 / 09:58

9 respostas

251

O Linux não usa extensões. Cabe ao criador do arquivo decidir se ele deseja que o nome tenha uma extensão. O Linux analisa o primeiro byte para descobrir com que tipo de arquivo está lidando.

Para remover tudo em um diretório, use:

rm /path/to/directory/*

Você pode usar a opção -r , por exemplo:

rm -r /path/to/directory/*

para remover também qualquer subdiretório (junto com todo o seu conteúdo) dentro do diretório do qual você está removendo o conteúdo. Caso contrário, ele mostrará um erro informando que não está removendo o diretório.

    
por Rinzwind 06.09.2011 / 10:06
133
  • Para remover a pasta com todo o seu conteúdo ( incluindo todas as pastas internas ):

    rm -rf /path/to/directory
    
  • Para remover todo o conteúdo da pasta ( incluindo todas as pastas internas ), mas não a pasta em si:

    rm -rf /path/to/directory/*
    

    ou

    rm -rf /path/to/directory/{*,.*}
    

    se você quiser ter certeza de que os arquivos / diretórios ocultos também serão removidos.

  • Para remover todos os "arquivos" de dentro de uma pasta ( não removendo as pastas internas ):

    rm -f /path/to/directory/{*,.*}
    

Onde:

  • rm - significa " remove "
  • -f - significa " force " que é útil quando você não quer ser perguntado / solicitado se deseja remover um arquivo, por exemplo.
  • -r - significa " recursivo ", o que significa que você deseja recursivamente descer todas as pastas e remover tudo.
por Lilian A. Moraru 07.09.2011 / 19:26
33

Para remover todos os arquivos no diretório (incluindo arquivos e subdiretórios ocultos), execute:

rm -rf /path/to/directory/{*,.*}
    
por Leonid V. Fedorenchik 23.11.2014 / 10:38
8

Se você quiser excluir apenas arquivos no diretório / path / to /, você pode fazer

find /path/to/directory -type f -print0| xargs -0 rm 

ou

find /path/to/directory -type f -exec rm '{}' \;

Você pode fazer carregamentos com find , a vantagem é que você pode listar o que é encontrado sem canalizá-lo para rm , para que você possa ver o que será excluído antes de começar.

    
por Richard Holloway 06.09.2011 / 14:13
6

Se você também quiser remover todos os subdiretórios e o próprio diretório, use rm -rf /path/to/directory . Mas sempre verifique novamente sua linha antes de pressionar return, rm -rf também pode causar muito dano, por exemplo, se você acidentalmente inserir um espaço após a primeira barra, tendo permissões de superusuário ...

    
por Tobias Kienzler 07.09.2011 / 10:51
6

Para excluir todos os arquivos e diretórios (incluindo os ocultos ) em um diretório, você pode tentar o seguinte:

  • exclua a pasta e recrie-a

    rm -rf dir_name && mkdir dir_name
    
  • use find

    find dir_name -mindepth 1 -delete  
    

Aqui, especificamos -mindepth 1 para excluir o diretório dir_name em si.
Dê uma olhada no seguinte link: link

    
por zeekvfu 27.11.2013 / 17:05
1

Você pode cd no diretório e, em seguida, executar o comando rm *.* como no DOS, se você se lembrar.

    
por V K Mavani 01.05.2013 / 02:59
0

Para excluir o diretório atual, você poderia, por exemplo, usar rm -d ./*

-d informa para excluir diretórios também.

    
por arviman 29.08.2017 / 09:17
-1

Como esta pergunta está constantemente no topo do Google quando procuro por mim:

As outras respostas sofrem de problemas diferentes:

  1. Alguns deles incluem . e .. , o que é barulhento, confuso e irritante.

  2. Alguns deles esquecem arquivos ocultos (arquivos que começam com um ponto).

  3. Eles não são excluídos em uma ordem correta (mais profunda primeiro) para permitir a exclusão do diretório.

  4. Eles entram em outros sistemas de arquivos (montados), o que geralmente é indesejado.

  5. Eles são difíceis de estender corretamente com parâmetros extras (mais sobre isso abaixo).

Então, para RECURSIVELY excluir todos os arquivos e pastas em um diretório, faça o seguinte:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p
-not \( -path "${DIR}/subdir" -prune \)
" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

Note que adicionei um argumento -xdev para evitar a descida para montagens (como /proc etc.).

Por que não -depth ou -delete ?

Apesar das pessoas estarem constantemente me rebaixando por isso, esses métodos têm uma desvantagem: eles não parecem ser extensíveis o suficiente para permitir -prune ing um subdiretório (sem introduzir mais problemas). Por contraste com este método, você poderia inserir

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p
-not \( -path "${DIR}/subdir" -prune \)
" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

antes do argumento -mindepth para excluir subdir de ter seu conteúdo excluído.

    
por Mehrdad 21.05.2018 / 02:54