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.