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/filesgroups
para excluir a pasta pai e todas as subpastas ...
mas eu quero excluir somente /filegroupA
, /filegroupB
, etc., e não excluir/config/filegroups
rm -rf /config/filegroups/filegroups{A,B}
?bash
, não inclui '.' pastas na expansão do nome do caminho. O que pode ou não ser desejado. Eu façoshopt -s dotglob
em.bashrc
corrigir isso. Apenas uma nota lateral de que alguém pode achar útil;).rm -rf /*
vai fazer;) --- seriamente não fazê-loRespostas:
Se você deseja excluir apenas diretórios (e links simbólicos para diretórios), deixando todos os arquivos
/config/filegroups
intocados, você pode usar uma barra final: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:fonte
Isso excluirá todos os arquivos e diretórios
/config/filegroups
incluindo arquivos e diretórios "ocultos" (nomes começando com.
).Se os nomes de arquivo ou diretório contiverem espaços, você deverá fazer o seguinte:
Bônus: você pode primeiro verificar o que será excluído assim:
Se você deseja manter certos arquivos ou diretórios, pode fazê-lo assim:
fonte
find
a-delete
opção?-delete
se recusa a excluir diretórios não vazios.-maxdepth
substituições-depth
, necessárias-delete
para excluir diretórios não vazios. Sem-maxdepth
você, 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-maxdepth
também significa que você não pode usar filtros facilmente-name
. Além disso,-delete
exclui os diretórios excluindo todos os objetos dentro primeiro, o que pode levar muito tempo se for uma árvore grande e profunda.Eu prefiro usar
find
com-exec
, isso faria sua ligação mais ou menos assim:fonte
Se você já está na pasta, basta digitar
rm -rf ./**
Então:
Este é um padrão global para excluir todas as subpastas do caminho local.
./
referindo-se à pasta local ... e**
para todas as pastas abaixo ..fonte
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-f
seu comando (já que o diretório superior seria excluído recursivamente antes do processamento do conteúdo) porrm
).