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


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

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"

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 {} \;

-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 ..


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.