bash - remove todos os diretórios (e conteúdos), mas não os arquivos no pwd

19

Gostaria de remover todos os diretórios do pwd, mas deixar os arquivos no pwd em paz. Se o conteúdo do meu pwd for:

mydir1
mydir2
myfile1
myfile2

então eu gostaria de ficar com apenas

myfile1
myfile2

Eu presumo que eu preciso usar rm -r -i

Estou correcto?

atomh33ls
fonte

Respostas:

10

Não, isso lhe daria "operando ausente", pois você não especificou nada. Colocar um *prompt também para arquivos.

Eu tentaria:

find -mindepth 1 -maxdepth 1 -type d -exec rm -r {} \;

O mindepth 1excluirá .dos resultados, o maxdepth 1excluirá a tentativa de executar os diretórios que serão excluídos de qualquer maneira (portanto, criando um aviso). Mas, na prática, você pode deixar os dois de fora se concordar em receber alguns avisos "inocentes".

fede.evol
fonte
21

Encontrei este em algum lugar:

rm -r */

Parece o caminho mais fácil. Com o seu exemplo, você teria que confirmar cada caso, se você tiver 5 arquivos, tudo bem, mas com estruturas de arquivos maiores, um modo interativo não é o caminho a seguir ... Apenas como sugestão, se for uma informação importante, faça uma cópia de segurança...

Martin
fonte
1
Isso também seguirá links simbólicos, o que provavelmente não é desejado aqui.
JdeBP
8

Usar

rm -rf ./*/

Isso evita o modo interativo e exclui apenas os diretórios do diretório local.

Nós vemos
fonte
Como o JdeBP apontou na resposta muito semelhante de Martin , se o diretório atual (de nível superior) contiver links simbólicos para outros diretórios, eles também serão excluídos (mesmo que não estejam ou estejam subordinados ao diretório atual).
Scott
3

Algo assim deve funcionar:

find /path -type d -exec rm -rf '{}' \;

-type d procura apenas diretórios

Matthew Williams
fonte
-1
you can also try in this way to delete only all folders not files from any location in linux.

    #delete only all dir and don't touch files
    #!/bin/bash
    for dir in `ls -l | grep ^d | awk '{print $9}'`
    do
    echo "going to delete $dir " `rm -rf $dir`
    done
    ls
linux.cnf
fonte