Remover linha de comando apenas de diretórios

1

Como remover pastas e conteúdo e manter arquivos no diretório atual?

antes

parent
├── folder1
├── folder2
│   ├── file1
│   ├── file2
├── folder3
├── file3
├── file4
└── file5

depois:

parent
├── file3
├── file4
└── file5
    
por Ghilas BELHADJ 16.03.2016 / 10:39

2 respostas

3

Algo como isso deve fazer o truque

cd parent
find . ! -path . -maxdepth 1 -type d -exec rm -rf {} \;

Isto irá procurar por diretórios no diretório de trabalho atual e reciclar apenas 1 nível abaixo e removerá os diretórios. Melhor fazer um testrun com ls em vez de rm antes de fazer isso para que você possa verificar o que será removido

cd parent
find . ! -path . -maxdepth 1 -type d -exec ls {} \;

Exemplo

jake@jake-HP /tmp/test $ tree
.
├── 1
├── 2
├── bar
│   ├── 1
│   ├── 2
│   └── 3
├── blah
│   ├── 1
│   ├── 2
│   └── 3
└── foo
    ├── 5
    └── 9

3 directories, 10 files
jake@jake-HP /tmp/test $ find . ! -path . -maxdepth 1 -type d -exec ls {} \;
1  2  bar  blah  foo
1  2  3
5  9
1  2  3
jake@jake-HP /tmp/test $ find . ! -path . -maxdepth 1 -type d -exec rm -rf {} \;
jake@jake-HP /tmp/test $ tree
.
├── 1
└── 2

0 directories, 2 files
    
por 16.03.2016 / 10:49
0

Usar o find é bom porque você especifica exatamente o que deseja fazer. No entanto, o xargs na resposta de Jake tem um problema com nomes de diretório contendo espaços. Você precisaria adicionar -print0 para encontrar e -0 para xargs.

Eu teria escrito

find parent -type d -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;

Isso é ainda mais simples:

rm -rf parent/*/

No entanto, ele não removerá os diretórios ocultos (começando com um período); você precisará adicioná-los:

rm -rf parent/*/ parent/.[^.]*/

Cuidado, no entanto, se você tiver links simbólicos apontando para outro lugar.

Se você não confiar em * / para corresponder somente aos diretórios, uma solução menos limpa que produzirá muitos erros (e isso não leva em conta diretórios ocultos porque isso fica complicado) é

rm -rf parent/*/* 
rmdir parent/*
    
por 16.03.2016 / 13:40