Linux cómo eliminar una carpeta basada en una subcarpeta

Linux cómo eliminar una carpeta basada en una subcarpeta

Necesito eliminar una serie de carpetas en Linux según el nombre de una subcarpeta.

/tmp/23245/Default
/tmp/34534/Default
/tmp/45435/Default
/tmp/65464/Main

Quiero eliminar todas las carpetas de /tmp que contienen una subcarpeta de /Default

estas carpetas

/tmp/23245/
/tmp/34534/
/tmp/45435/

Puedo encontrar los archivos usando: find /tmp/*/Default

Pero a partir de ese resultado, ¿cómo puedo obtener el nombre de la carpeta /tmp/Foldername para canalizarlo al rm -rf?

Respuesta1

Puedes probar lo siguiente usando buscar:

find /tmp -mindepth 2 -maxdepth 2 -name "*Default*" -type d -printf "%h\n" | xargs rm -R

Utilice min Depth y max Depth para asegurarse de que estamos analizando directorios 2 niveles por debajo de /tmp y luego use %h para imprimir solo los directorios principales. Canalice la salida a xargs rm -R para eliminar los directorios principales.

Respuesta2

Hay dirnameen GNU coreutils:

for i in /tmp/*/Default; do
  rm -R "$(dirname "$i")";
done

findQuizás también haya un enfoque. No estoy familiarizado con él, así que se lo dejo a usted y/o a los demás.

EDITAR: Quizás incluso rm -R "$(dirname /tmp/*/Default)"funcionaría

Respuesta3

¿Has probado rm -d dirnamecon un *?

rm -d /tmp/*/Default

Acabo de salir de este sitio:https://linuxize.com/post/rm-command-in-linux/

información relacionada