Para este tipo de estructura dir:
/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...
Sé que puedo usar rm -rf /config/filesgroups
para eliminar la carpeta principal y todas las subcarpetas ...
pero quiero eliminar sólo /filegroupA
, /filegroupB
, etc., y no elimine/config/filegroups
rm -rf /config/filegroups/filegroups{A,B}
?bash
no incluye '.' carpetas en la expansión del nombre de ruta. Lo que puede o no ser deseado. Yo lo hagoshopt -s dotglob
en.bashrc
arreglar eso. Solo una nota al margen que alguien podría encontrar útil;).rm -rf /*
lo hará;) --- en serio no lo hagasRespuestas:
Si desea eliminar solo directorios (y enlaces simbólicos a directorios), dejando
/config/filegroups
intactos los archivos , puede usar una barra diagonal final:Si desea eliminar directorios con nombres que comienzan también con un
.
, suponiendo que tenga un bash bastante reciente, debe usar la opción de shell dotglob:fuente
Esto eliminará todos los archivos y directorios
/config/filegroups
incluidos, incluidos los archivos y directorios "ocultos" (nombres que comienzan con.
).Si los nombres de archivo o directorio contienen espacios, debe hacerlo así:
Bonificación: primero puede verificar qué se va a eliminar de esta manera:
Si desea mantener ciertos archivos o directorios, puede hacerlo así:
fuente
find
la-delete
opción?-delete
se niega a eliminar directorios no vacíos.-maxdepth
reemplaza-depth
, lo cual es necesario-delete
para eliminar directorios no vacíos. Sin-maxdepth
usted, no puede ver fácilmente qué directorios se van a eliminar porque también enumera los archivos dentro de los directorios. No usar-maxdepth
también significa que no puedes usar fácilmente filtros como-name
. Además,-delete
elimina los directorios al eliminar primero todos los objetos dentro, lo que puede llevar mucho tiempo si es un árbol grande y profundo.Prefiero usar
find
con-exec
, eso haría que tu llamada sea así:fuente
Si ya está en la carpeta, simplemente puede escribir
rm -rf ./**
Entonces:
Este es un patrón global para eliminar todas las subcarpetas de la ruta local.
./
refiriéndose a la carpeta local ... y**
para todas las carpetas debajo ...fuente
rm -rf ./*
, excepto que es probable que reciba mensajes de diagnóstico sobre "No-f
existe tal archivo o directorio" si no está utilizando su comando (ya que el directorio superior se eliminaría recursivamente antes de que se procese su contenido) porrm
).