Como apagar todos os arquivos dentro de subpastas, mas não as subpastas?

4

Eu sei como excluir recursivamente todas as subpastas e todos os arquivos. Mas neste caso, preciso preservar subpastas. Basicamente, eu preciso esvaziar todos eles.

Então, eu tenho

rootdir/
        subA/           
        subB/
        subC/
        subN/

E eu quero excluir todos os arquivos dentro de subA to subN , mas sem excluir subA ... subN

O que é o comando do console para isso? Eu acho que é uma mudança para rm

    
por ubuntico 27.04.2015 / 16:39

4 respostas

17

Você pode usar o comando find para identificar apenas arquivos regulares (digite f ) recursivamente

find rootdir -type f

Se isso mostrar os resultados esperados, exclua-os

find rootdir -type f -delete

NB, esta é uma exclusão real, não uma "mudança para a lixeira", portanto, tenha 100% de certeza de que é o que você realmente quer fazer antes de executar o comando.

    
por steeldriver 27.04.2015 / 16:50
2

Com base na resposta do steeldriver, você pode adicionar xargs para que haja apenas uma chamada para o gvfs-trash. no exemplo, find chamará gvfs-trash uma vez para cada arquivo encontrado por find . Isso pode ser lento se houver muitos arquivos:

find . -type f -print0 | xargs -0 gvfs-trash
    
por Unacoder 28.04.2015 / 03:59
0

Você também pode fazer isso com o comando rm , mas teria que fazer isso repetidamente.

você pode primeiro cd para o diretório pai com isto

cd /rootdir

depois disso você terá que correr

rm -rf ./folder/*

Substitua a pasta pelo nome da pasta que você deseja esvaziar (por exemplo, subA).

Repita isso até que todas as pastas estejam vazias.

Observe que -rf removerá também removerá todas as pastas dentro da pasta que você deseja esvaziar

    
por Rumesh 28.04.2015 / 04:07
0

Você pode fazer isso com -exec da seguinte forma: find rootdir -type f -exec rm {} \; (observe que a barra invertida é essencial)

    
por Tolga Ozses 28.04.2015 / 07:13