eliminar subcarpetas sin eliminar la carpeta principal


15

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/filesgroupspara eliminar la carpeta principal y todas las subcarpetas ...

pero quiero eliminar sólo /filegroupA, /filegroupB, etc., y no elimine/config/filegroups


13
¿Hay algún problema para usar rm -rf / config / filesgroups / *?
dsmsk80

3
O tal vez incluso rm -rf /config/filegroups/filegroups{A,B}?
Drav Sloan

@dsumsky Por defecto bashno incluye '.' carpetas en la expansión del nombre de ruta. Lo que puede o no ser deseado. Yo lo hago shopt -s dotgloben .bashrcarreglar eso. Solo una nota al margen que alguien podría encontrar útil;).
Miroslav Koškár

¿Algo de esto funcionó para usted? Si es así, ¿le importaría aceptar una respuesta para ayudar a otros (como yo) que quieran hacer lo mismo?
Mawg dice que reinstale a Monica el

rm -rf /*lo hará;) --- en serio no lo hagas
Muhammad Umer

Respuestas:


28
rm -rf /config/filegroups/*

Si desea eliminar solo directorios (y enlaces simbólicos a directorios), dejando /config/filegroupsintactos los archivos , puede usar una barra diagonal final:

rm -rf /config/filegroups/*/

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:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob

y por favor no que no funcione para rm -rf "/ config / filegroups / *"
Ilya Yevlampiev

5

Esto eliminará todos los archivos y directorios /config/filegroupsincluidos, incluidos los archivos y directorios "ocultos" (nombres que comienzan con .).

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

Si los nombres de archivo o directorio contienen espacios, debe hacerlo así:

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

Bonificación: primero puede verificar qué se va a eliminar de esta manera:

find /config/filegroups -mindepth 1 -maxdepth 1

Si desea mantener ciertos archivos o directorios, puede hacerlo así:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"

¿Hay alguna razón para no usar findla -deleteopción?
evilsoup

44
-deletese niega a eliminar directorios no vacíos. -maxdepthreemplaza -depth, lo cual es necesario -deletepara eliminar directorios no vacíos. Sin -maxdepthusted, no puede ver fácilmente qué directorios se van a eliminar porque también enumera los archivos dentro de los directorios. No usar -maxdepthtambién significa que no puedes usar fácilmente filtros como -name. Además, -deleteelimina los directorios al eliminar primero todos los objetos dentro, lo que puede llevar mucho tiempo si es un árbol grande y profundo.
lesmana

4

Prefiero usar findcon -exec, eso haría que tu llamada sea así:

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

-2

Si ya está en la carpeta, simplemente puede escribir rm -rf ./**

Entonces:

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

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


1
Qué carpeta y por qué `**` `
RalfFriedl

1
Esto sería exactamente lo mismo que rm -rf ./*, excepto que es probable que reciba mensajes de diagnóstico sobre "No -fexiste 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) por rm).
Kusalananda
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.