En Linux, ¿cómo elimino carpetas con un nombre determinado que están anidadas en una jerarquía de carpetas?
Las siguientes rutas están debajo de una carpeta y me gustaría eliminar todas las carpetas nombradas a.
1/2/3/a
1/2/3/b
10/20/30/a
10/20/30/b
100/200/300/a
100/200/300/b
¿Qué comando de Linux debo usar de la carpeta principal?

Respuestas:
Si el directorio de destino está vacío, use find, filtre solo con directorios, filtre por nombre, ejecute rmdir:
Si desea eliminar recursivamente su contenido, reemplácelo
-exec rmdir {} \;por-deleteo-prune -exec rm -rf {} \;. Otras respuestas incluyen detalles sobre estas versiones, acéptelas también.fuente
{} \;hace?{}puede leerse como "para cada archivo / carpeta coincidente", es decir, sustituye a cada archivo / carpeta "encontrado".\;es un terminador para la-execcláusula-pruneindicador a la respuesta según la sugerencia de @David Grayson. Sin esto,findaún intentará visitar la carpeta que ahora falta y finalmente saldrá con un código de error, que puede, por ejemplo, fallar en una compilación de Docker.Use find para el nombre "a" y ejecute rm para eliminar aquellos nombrados de acuerdo a sus deseos, de la siguiente manera:
Pruébelo primero usando ls para enumerar:
Para asegurarse de que esto solo elimine directorios y no archivos sin formato, utilice el argumento "-type d" (como se sugiere en los comentarios):
El "{}" es una sustitución para cada archivo "a" encontrado: el comando exec se ejecuta contra cada uno por sustitución.
fuente
1/2/a/3/4, que puede no ser intencionado, por lo que +1 para la recomendación de probar primero ...echo {}para probarlo primero, en lugar dels {}node_modules/.find . -name a -type d -exec rm -rf {} \;y funcionó, aunque se imprimiófind: ‘./subdir/subdir/a’: No such file or directorypara cada directorio eliminado.Esto también funciona: eliminará todas las carpetas llamadas "a" y sus contenidos:
fuente
find/rm.find . -name a -exec rm -rf {} \;, find se bloqueará cuando intente ingresar a ese directorio para buscar más elementos, dándole un error comofind: '1/2/3/a': No such file or directory.illegal option --t. Tuve que pasar también el directorio para buscar en ( stackoverflow.com/questions/25840713/... ):rm -rf `find . -type d -name a`.Para eliminar todos los directorios con el nombre
foo, ejecute:A las otras respuestas les falta algo importante: la
-pruneopción. Sin-prune, GNU find eliminará el directorio con el nombre correspondiente y luego intentará recurrir a él para encontrar más directorios que coincidan. La-pruneopción le dice que no vuelva a aparecer en un directorio que coincida con las condiciones.fuente
Terminé aquí buscando eliminar mis
node_modulescarpetas antes de hacer una copia de seguridad de mi trabajo en progreso usandorsync. Un requisito clave es que lanode_modulescarpeta se puede anidar, por lo que necesita la-pruneopción.Primero ejecuté esto para verificar visualmente las carpetas que se eliminarán:
Luego ejecuté esto para eliminarlos a todos:
Gracias a pistache
fuente
sh #!/bin/bash echo "Found node_modules: "; find -type d -name node_modules -prune; read -r -p "Do you really want to delete all directories? [yes/no] " input; if [ ! $input != "yes" ]; then find -type d -name node_modules -prune -exec rm -rf {} \;; fiDebería hacer el truco. ADVERTENCIA, si bombea accidentalmente una
.o/enxargs rm -Rftoda su computadora, se eliminará sin una opción para recuperarla, lo que requerirá la reinstalación del sistema operativo.fuente
Tenía más de 100 archivos como
las respuestas anteriores no me funcionaron
pero el siguiente comando me ayudó.
di
-typecomo.así elimina archivos y carpetas que comienza conlog-y
rm -rfelimina carpetas de forma recursiva incluso si tiene archivos.si quieres carpetas solo
archivos solos
fuente
Combinando múltiples respuestas, aquí hay un comando que funciona tanto en Linux como en MacOS
fuente
Otro:
fuente
-deleteno elimina las carpetas no vacías.Este comando me funciona. Hace su trabajo recursivamente
. - carpeta actual
"node_modules" - nombre de la carpeta
fuente
buscar ruta / a / las / carpetas -maxdepth 1 -name "my_ *" -type d -delete
fuente