Eliminar la carpeta node_modules de forma recursiva de una ruta especificada usando la línea de comando

92

Tengo varios proyectos npm guardados en un directorio local. Ahora quiero hacer una copia de seguridad de mis proyectos sin la node_modulescarpeta, ya que ocupa mucho espacio y también se puede recuperar en cualquier momento usando npm install.

Entonces, necesito una solución para eliminar todas las carpetas node_modules de forma recursiva desde una ruta específica usando la interfaz de línea de comando. Cualquier sugerencia / ayuda es muy apreciada.

Sumit
fuente

Respuestas:

224

Imprima una lista de directorios que se eliminarán:

find . -name 'node_modules' -type d -prune

Elimina directorios del directorio de trabajo actual:

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +

Alternativamente, puede usar trash ( brew install trash) para la eliminación por etapas:

find . -name node_modules -type d -prune -exec trash {} +
Darius
fuente
26
-prunees una optimización importante. En caso de que find no recurra a los node_moduledirectorios (para buscar node_modules anidados)
rzymek
1
Para un proyecto, obtengo /node_modules/gulp-server-livereload/node_modules: Directory not emptymuchas carpetas de node_modules "internas". ¿Cómo solucionar esto?
josemigallas
15
Esto es como, lo digo en serio, la vigésima vez que estoy en esta respuesta para copiar este código ... xD
Cipi
6
¿Cuál es el significado de '{}' +?
Rokit
3
{}es un marcador de posición que findreemplaza con la ruta del archivo que encontró. +dice findque agregue todas las rutas de archivo a un solo comando en lugar de ejecutar rmpara cada uno.
Tamlyn
24

Mejorando la respuesta aceptada,

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +

Descubrí que el comando se ejecutaría durante mucho tiempo para recuperar todas las carpetas y luego ejecutar un comando de eliminación, para que el comando sea reanudable, sugiero usar \;y ver el progreso del comando que se está ejecutando -printpara ver cómo se elimina el directorio.

Nota: Primero debe cdingresar al directorio raíz y luego ejecutar el comando o en lugar de find .usarfind {project_directory}

Para eliminar carpetas una por una

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' \;

Para eliminar carpetas una por una e imprimir la carpeta que se está eliminando

find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;

Editar:

Para las personas a las que les gusta la forma interactiva de hacer esto, consulte la respuesta de @jeckep, ejecute esto en el directorio que desea eliminar.

npx npkill
Sidharth
fuente
Buenas mejoras en la respuesta aceptada @Sidharth, muy apreciada
nclarx
10

Me he encontrado con esta solución,

  • primero busque la carpeta usando findy especifique el nombre de la carpeta.
  • ejecutar el comando borrar de forma recursiva -exec rm -rf '{}' +

ejecute el siguiente comando para eliminar carpetas de forma recursiva

find /path -type d -name "node_modules" -exec rm -rf '{}' +

Sumit
fuente
1

bashfunción para eliminar node_modules. Eliminará todos los node_modulesdirectorios de forma recursiva del directorio de trabajo actual, mientras imprime las rutas encontradas.

Solo necesita poner en algún lugar de su $PATH

rmnodemodules(){

  find . -name 'node_modules' -type d -prune -exec echo '{}' \; -exec rm -rf {} \; 

}
Ivan V.
fuente
0

Esto funciona muy bien

find . -name "node_modules" -exec rm -rf '{}' +
Ankit Sinha
fuente
2
Este es un duplicado de las respuestas anteriores, solo que sin explicación.
moopet