Questão Como remover todos os arquivos de um diretório?


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


205
2017-09-06 07:58


origem




Respostas:


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 ele está lidando.

Para remover tudo em um diretório, use:

rm /path/to/directory/*

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

rm -r /path/to/directory/* 

para também remover quaisquer sub-diretórios (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.


236
2017-09-06 08:06



Se você também quiser excluir arquivos ocultos, execute shopt -s dotglob antes de correr rm (...) - danjjl
O significado all files ;) *.* significa todos os arquivos contendo um . em algum lugar no nome - Rinzwind
@Rinzwind, mais precisamente, o asterisco significa "zero ou mais de qualquer caractere". assim *a* significa zero ou mais caracteres, seguidos por aseguido por zero ou mais caracteres. Corresponderia aos nomes dos arquivos happy, apple, a ou la. - DisgruntledGoat
@ user784637 você está muito facilmente impressionado - barlop
Aqui está o comando que você quer: rm - * - anon58192932


  • Remover a pasta com todo o seu conteúdo (incluindo todas as pastas interiores):

    rm -rf /path/to/directory
    
  • Para remover todo o conteúdo da pasta(incluindo todas as pastas interiores) 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 pastas interiores):

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

Onde:

  • rm - apoia "remover"
  • -f - apoia "força"que é útil quando você não quer ser perguntado / solicitado se você deseja remover um arquivo, por exemplo.
  • -r - apoia "recursivo"o que significa que você quer recursivamente descer todas as pastas e remover tudo.

126
2017-09-07 17:26



Descobri que esta é a resposta mais abrangente e útil, além da resposta marcada como Aceito. - inspirednz
rm -rf /path/to/directory/* não remove um arquivo oculto na pasta, por exemplo .htaccess. Talvez rm -rf /path/to/directory/.? Não tentei. - Mark Berry
@ MarkBerry rm -rf /path/to/directory/.* - Lilian A. Moraru
@ LilianA.Moraru, fiz alguns testes hoje. rm -rf /path/to/directory/.* exclui apenas o (s) arquivo (s) oculto (s) no diretório especificado. Olhando para o comentário do @ danjjl sobre a resposta do @Rinzwind, para também excluir arquivos ocultos, execute shopt -s dotglob antes de correr rm -rf /path/to/directory/*. - Mark Berry
CUIDADO: rm -rf /path/to/directory/.* no meu sistema causou a exclusão de itens em /path/to. Felizmente, acabei de fazer backup de todos os meus dados em um disco separado. Escusado será dizer que não emitir o comando rm -rf /path/to/directory/.* a menos que você tenha feito o backup de todo o seu computador em um local separado / seguro! - lawlist


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

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

30
2017-11-23 09:38



Esta deve ser a bela resposta aceita. Obrigado! - Nam G VU
Este glob não combina com "." e também? - hertzsprung
@hertzsprung - ele faz, e ele lhe dará um aviso de que não pode excluir ./ e ../, mas ainda vai apagar os arquivos ocultos. - Ryan Wheale
Isso não funciona no console do Mac, arquivos ocultos ainda estão lá com essa linha de comando. - agapitocandemor


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 cargas 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.


8
2017-09-06 12:13



GNU find como um -delete predicado. Se você ainda quiser usar -exec, substituindo \; com + vai se reunir rm juntos, aumentando a eficiência. - enzotib
Uma grande quantidade de arquivos com '+' causará problemas, pois a lista será muito grande, igual a rm -f *. e ao remover grandes quantidades de arquivos da mesma pasta (falando em milhões) ambos não são bons :) No final, o C ++ apareceu e removeu os arquivos na ordem dos inodes na dir-tree. - Osis
Você realmente deveria adicionar um - depois do rm. Sem isso, se você tiver um nome de arquivo -rf ou similar, será interpretado como argumento para rm. por exemplo. xargs -0 rm - ou -exec rm - {} \; - Richm
você também pode fornecer o argumento -n para xargs. Isso fará com que ele divida os comandos rm para ter um número máximo de argumentos, ou seja, 'xargs -n 100 -0 rm -' removerá arquivos em partes de 100. - Richm
Você também pode adicionar -maxdepth 1 para garantir que a localização não retorne arquivos de nenhum subdiretório. isto é, encontrar / path / to / directory -maxdepth 1 -tipo f - Richm


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


6
2017-09-07 08:51





Para apagar todos os arquivos e diretórios (incluindo o escondido 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 diretório dir_name em si.
Dê uma olhada no seguinte link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory


5
2017-11-27 16:05



Obrigado pelo seu conselho e acrescentei mais explicações para os links. - zeekvfu
Tenha cuidado, pois excluir e recriar a pasta pode resultar em permissões diferentes / erradas para essa pasta! - einjohn


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


1
2018-05-01 00:59



DOS é DEL para arquivos e RMDIR para diretórios esvaziados - e arquivos ocultos e de sistema devem ter esses atributos ATTRIB removidos primeiro. Não é tão simples assim;) - Eric


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

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


0
2017-08-29 07:17