desenv-web-rp.com

Como remover todos os arquivos em um diretório?

Estou tentando remover todos os arquivos e subdiretórios em um diretório. Eu usei rm -r para remover todos os arquivos, mas quero remover todos os arquivos e subdiretórios, excluindo o próprio diretório superior.

Por exemplo, eu tenho um diretório principal como images. Ele contém os arquivos header.png, footer.png e um subdiretório.

Agora eu quero excluir header.png, footer.png e o subdiretório, mas não images.

Como posso fazer isso no linux?

78
poorani

Se o diretório de nível superior for chamado images, execute rm -r images/*. Isso usa o operador glob da Shell * para correr rm -r em todos os arquivos ou diretórios dentro de images.

63
Jordan Lewis

Para excluir arquivos ocultos, você deve especificar:

rm -r images/* images/.*

Com conchas cujos globs incluem . e .., isso levará a um erro como

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

mas ele excluirá arquivos ocultos.

Uma abordagem sem mensagem de erro é usar a localização/exclusão com mindepth. Isso é gnu-find.

find images -mindepth 1 -delete

Talvez sua descoberta não possua -mindepth ou -delete predicado; nesse caso, você pode fazer:

find images/. ! -name . -Prune -exec rm -rf {} +
54
user unknown

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

  • usar ls -Ab para corresponder a todos os arquivos/diretórios

    cd dir_name && rm -rf `ls -Ab`
    
  • use find para corresponder a todos os arquivos/diretórios

    find dir_name -mindepth 1 -delete
    

    ou, se o seu find não suportar -delete:

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • exclua a pasta e recrie-a

    rm -rf dir_name && mkdir dir_name
    
  • na festança,

    shopt -s dotglob  
    rm -rf dir_name/*
    
21
zeekvfu

Para excluir todos os arquivos regulares recursivamente dentro de um diretório, este comando (assumindo GNU ou FreeBSD find) é bom o suficiente:

find . -type f -delete

Isso deixa todos os arquivos não regulares, como links simbólicos (se eles apontam para arquivos regulares ou não), diretórios, fifos, soquetes, dispositivos ...

Veja também:

find . ! -type d -delete

para excluir arquivos de qualquer tipo, exceto diretório.

11
amit singh

Experimente esta versão:

 rm -r test/*
6
demas

Estou usando o comando find aqui:

Etapa 1: Encontre todos os arquivos e exclua-os:

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

Exemplo:

find /home/user/Desktop/images/ -type f -exec rm {} \;

Etapa 2: Encontre todos os subdiretórios e exclua-os:

find /path/to/directory/ -type d -exec rm -R {} \;
3
Mandar Shinde

A questão era esvaziar um diretório = remover o conteúdo de um diretório, incluindo arquivos ocultos, mas não o próprio diretório. O comando find com -mindepth 1 é realmente o caminho correto a seguir, mas para evitar mensagens de erro, ele deve ser associado a -maxdepth 1:

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
3
Maddes

a sintaxe da rm é:

rm [OPTION]... FILE...

Portanto, você deve declarar o caminho apropriado explicitamente, por exemplo.

rm -r sub_dir/
0
Zaur Nasibov

Você pode remover o diretório usando o seguinte comando:

Sudo rm -r directoryname1/2/3/*

Ele será excluído do diretório inteiro após 3/*.

Exemplo Sudo rm -r Downloads/música/*

Ele excluirá todos os arquivos que estão dentro de Downloads/song.

0
Dharmendra Rajput

Isso funciona perfeitamente para mim, testou várias variações trabalhadas todas as vezes.

No diretório que contém o diretório de imagens.

rm -frd ./images/*

antes:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

depois de:

images/
0
deb-linux-user

Para excluir todos os arquivos e subdiretórios do diretório atual, , incluindo os ocultos, sem mensagem de erro :

rm -rf .[^.] .??* *

Ou, no diretório pai:

rm -rf images/.[^.] images/.??* images/*

De https://serverfault.com/a/47940/269538 .

0
this

Outra opção:

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

fonte: https://askubuntu.com/a/552834/56648

0
Eyal Levin