Como remover todos os arquivos de um diretório?

O mais próximo que cheguei é

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

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

O Linux não usa extensões. Cabe ao criador do arquivo decidir se o nome deve ter uma extensão. O Linux analisa os primeiros bytes para descobrir com que tipo de arquivo está lidando.

  • Remover arquivos não ocultos* em um uso de diretório:

    rm /path/to/directory/*

    No entanto, isso mostrará um erro para cada subdiretório, porque neste modo só é permitido excluir arquivos.

  • Para remover todos os arquivos e subdiretórios não ocultos (junto com todo o seu conteúdo) em um uso de diretório:

    rm -r /path/to/directory/*

* Arquivos e diretórios ocultos são aqueles cujos nomes começam com . (ponto) personagem, por exemplo.: .hidden-file ou .hidden-directory/. Observe que, em Bash, se o dotglob Opcao (que está desativado por padrão) está definido, rm atuará em arquivos ocultos também, porque eles serão incluídos quando * é expandido pelo shell para fornecer a lista de argumentos do nome do arquivo.

  • Para remover uma pasta com todo o seu conteúdo (incluindo todas as pastas interiores):

    rm -rf /path/to/directory
  • Para remover todos os conteúdo da pasta (incluindo todas as pastas interiores), mas não a própria pasta:

    rm -rf /path/to/directory/*

    ou, se você quiser ter certeza de que os arquivos/diretórios ocultos também são removidos:

    rm -rf /path/to/directory/{*,.*}
  • Para remover todos os" arquivos & quot; de dentro de uma pasta(nao removendo pastas interiores):

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

Aviso: se você tiver espaços em seu caminho, certifique-se de Sempre usar aspas.

rm -rf /path/to the/directory/*

é equivalente a 2 separados rm -rf chama:

rm -rf /path/torm -rf the/directory/*

Para evitar esse problema, você pode usar 'plica'(evita todas as expansões, mesmo de variáveis de shell) ou "aspa"(permite a expansão de variáveis de shell, mas evita outras expansões):

rm -rf "/path/to the/directory/"*

Onde:

  • rm - significa remover
  • -f - significa forca o que é útil quando você não deseja ser solicitado / solicitado se deseja remover um arquivo, por exemplo.
  • -r - significa recorrente o que significa que você deseja descer recursivamente todas as pastas e remover tudo.

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

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

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

  • exclua a pasta e recrie-a

    rm -rf dir_name && mkdir dir_name
  • usar find

    find dir_name -mindepth 1 -delete  

Aqui nós especificamos -mindepth 1 para excluir o próprio diretório dir_name.
Dê uma olhada no seguinte link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

Se você deseja 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 cargas com find, a vantagem é que você pode listar o que é encontrado sem canalizá-lo para rm então você pode ver o que será excluído antes de começar.

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

Uma vez que esta questão está constantemente no topo do Google quando eu mesmo procuro por isso:

As outras respostas sofrem de diferentes problemas:

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

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

  3. Eles não excluem em uma ordem correta (mais profunda) para permitir a exclusão do diretório.

  4. Eles descem para outros sistemas de arquivos (montados), que geralmente não são desejados.

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

Portanto, para excluir recursivamente todos os arquivos e pastas em um diretório, faça isso:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

Observe que adicionei um -xdev argumento para evitar descer em montarias (como /proc etc.).

Por que não -depth ou -delete?

Apesar das pessoas constantemente me rebaixarem para isso, esses métodos têm uma desvantagem: não parece que sejam extensíveis o suficiente para permitir -pruneum subdiretório (sem introduzir mais problemas). Em contraste com este método, você pode inserir

-not \( -path "${DIR}/subdir" -prune \)

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

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

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

- D diz para excluir diretórios também.

Veja a resposta aqui, isso pode remover arquivos ocultos também sem qualquer aviso e excluir o próprio diretório ubuntu - Delete contents but not directory in Linux? - Stack Overflow

Não tenho reputação suficiente para adicionar uma resposta real, mas ao usar a solução shopt-s dotglob && rm /path/to/directory/* no bash, (shopt-s dotglob & & & rm /path/to/directory/*) (com parênteses) impedirá que shopt-s dotglob vaze além deste comando. (Parênteses executam os comandos contidos em uma subcamada.)