excluir subpastas sem excluir a pasta pai

15

Para este tipo de estrutura de diretório:

/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/filesgroupspara excluir a pasta pai e todas as subpastas ...

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

BaltoStar
fonte
13
Existe algum problema para usar rm -rf / config / filesgroups / *?
dsmsk80
3
Ou talvez até rm -rf /config/filegroups/filegroups{A,B}?
Drav Sloan
@dsumsky Por padrão bash, não inclui '.' pastas na expansão do nome do caminho. O que pode ou não ser desejado. Eu faço shopt -s dotglobem .bashrccorrigir isso. Apenas uma nota lateral de que alguém pode achar útil;).
Miroslav Koškár
Alguma dessas coisas funcionou para você? Em caso afirmativo, você se importaria em aceitar uma resposta, a fim de ajudar outras pessoas (como eu) que querem fazer a mesma coisa?
Mawg diz que restabelece Monica
rm -rf /*vai fazer;) --- seriamente não fazê-lo
Muhammad Umer

Respostas:

28
rm -rf /config/filegroups/*

Se você deseja excluir apenas diretórios (e links simbólicos para diretórios), deixando todos os arquivos /config/filegroupsintocados, você pode usar uma barra final:

rm -rf /config/filegroups/*/

Se você deseja excluir diretórios com nomes que começam com a .também, supondo que você tenha um bash relativamente recente, use a opção shell do dotglob:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob
evilsoup
fonte
e por favor, não que ele não funcione para rm -rf "/ config / filegroups / *"
Ilya Yevlampiev
5

Isso excluirá todos os arquivos e diretórios /config/filegroupsincluindo arquivos e diretórios "ocultos" (nomes começando com .).

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

Se os nomes de arquivo ou diretório contiverem espaços, você deverá fazer o seguinte:

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ê deseja manter certos arquivos ou diretórios, pode fazê-lo assim:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"
lesmana
fonte
Existe algum motivo para não usar finda -deleteopção?
Evilsoup 16/08
4
-deletese recusa a excluir diretórios não vazios. -maxdepthsubstituições -depth, necessárias -deletepara excluir diretórios não vazios. Sem -maxdepthvocê, não é possível ver facilmente quais diretórios serão excluídos porque também lista os arquivos dentro dos diretórios. Não usar -maxdepthtambém significa que você não pode usar filtros facilmente -name. Além disso, -deleteexclui os diretórios excluindo todos os objetos dentro primeiro, o que pode levar muito tempo se for uma árvore grande e profunda.
Lesmana
4

Eu prefiro usar findcom -exec, isso faria sua ligação mais ou menos assim:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;
Panthro
fonte
-2

Se você já está na pasta, basta digitar rm -rf ./**

Então:

cd /config/filesgroups
rm -rf ./**

Este é um padrão global para excluir todas as subpastas do caminho local.

./referindo-se à pasta local ... e **para todas as pastas abaixo ..

Mantisimo
fonte
1
Qual pasta e por que `**` `
RalfFriedl
1
Seria exatamente o mesmo que rm -rf ./*, exceto que é provável que você receba mensagens de diagnóstico sobre "Esse arquivo ou diretório não existe" se não estiver usando -fseu comando (já que o diretório superior seria excluído recursivamente antes do processamento do conteúdo) por rm).
Kusalananda