elimina subpastas sem eliminar a pasta principal

12

Para este tipo de estrutura dir:

/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...

Eu sei que posso usar rm -rf /config/filesgroups para excluir a pasta pai e todas as subpastas ...

mas quero excluir apenas /filegroupA , /filegroupB , etc. e não excluir /config/filegroups

    
por BaltoStar 15.08.2013 / 22:20

3 respostas

22

rm -rf /config/filegroups/*

Se você quiser excluir somente diretórios (e links simbólicos para diretórios), deixando todos os arquivos em /config/filegroups intocados, você pode usar uma barra à direita:

rm -rf /config/filegroups/*/

Se você quiser excluir diretórios cujos nomes começam com . , supondo que você tenha um bash razoavelmente recente, você deve usar a opção shell do dotglob:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob
    
por 16.08.2013 / 10:12
3

Isso excluirá todos os arquivos e diretórios em /config/filegroups , incluindo arquivos e diretórios "ocultos" (nomes que começam com . ).

find /config/filegroups -mindepth 1 -maxdepth 1 | xargs rm -rf

Se os nomes de arquivos ou diretórios contiverem espaços, você precisa fazer assim:

find /config/filegroups -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

Bônus: você pode primeiro verificar o que será excluído assim:

find /config/filegroups -mindepth 1 -maxdepth 1

Se você quiser manter certos arquivos ou diretórios, você pode fazer assim:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"
    
por 16.08.2013 / 04:08
2

Eu prefiro usar find com -exec , o que tornaria sua ligação mais ou menos assim:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;
    
por 09.11.2014 / 04:09

Tags