Supprimer le dossier node_modules de manière récursive à partir d'un chemin spécifié à l'aide de la ligne de commande


92

J'ai plusieurs projets npm enregistrés dans un répertoire local. Maintenant, je veux faire une sauvegarde de mes projets sans le node_modulesdossier, car il prend beaucoup d'espace et peut également être récupéré à tout moment en utilisant npm install.

J'ai donc besoin d'une solution pour supprimer tous les dossiers node_modules de manière récursive à partir d'un chemin spécifié à l'aide de l'interface de ligne de commande. Toute suggestion / aide est très appréciable.

Réponses:


225

Imprimez une liste des répertoires à supprimer:

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

Supprimer les répertoires du répertoire de travail actuel:

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

Vous pouvez également utiliser trash ( brew install trash) pour la suppression par étapes:

find . -name node_modules -type d -prune -exec trash {} +

26
-pruneest une optimisation importante. Il va trouver cas pas récursivité dans les node_modulerépertoires (à la recherche de node_modules imbriquées)
rzymek

1
Pour un projet, je reçois /node_modules/gulp-server-livereload/node_modules: Directory not emptybeaucoup de dossiers node_modules "internes". Comment contourner cela?
josemigallas

15
C'est comme, je suis sérieux, la 20e fois que je suis à cette réponse pour copier ce code ... xD
Cipi

6
Quelle est la signification de '{}' +?
Rokit

3
{}est un espace réservé qui findremplace par le chemin du fichier qu'il a trouvé. +dit findd'ajouter tous les chemins de fichiers à une seule commande plutôt que de s'exécuter rmpour chacun.
Tamlyn

24

Améliorer la réponse acceptée,

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

J'ai trouvé que la commande s'exécuterait très longtemps pour récupérer tous les dossiers, puis exécuter une commande de suppression, pour rendre la commande réactivable, je suggérerais d'utiliser \;et pour voir la progression de la commande en cours d'exécution, utilisez -printpour voir le répertoire en cours de suppression.

Remarque: vous devez d'abord cddans le répertoire racine, puis exécuter la commande ou au lieu d' find .utiliserfind {project_directory}

Pour supprimer des dossiers un par un

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

Pour supprimer les dossiers un par un et imprimer le dossier en cours de suppression

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

Éditer:

Pour les personnes qui aiment la manière interactive de le faire, reportez-vous à la réponse @jeckep, exécutez-la dans le répertoire que vous souhaitez élaguer.

npx npkill

Belles améliorations sur la réponse acceptée @Sidharth, très appréciées
nclarx


10

J'ai trouvé cette solution,

  • recherchez d'abord le dossier en utilisant findet spécifiez le nom du dossier.
  • exécuter la commande de suppression de manière récursive -exec rm -rf '{}' +

exécutez la commande suivante pour supprimer des dossiers de manière récursive

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


1

bashfonction à supprimer node_modules. Il supprimera tous les node_modulesrépertoires de manière récursive du répertoire de travail actuel, tout en imprimant les chemins trouvés.

Vous avez juste besoin de mettre quelque part dans votre $PATH

rmnodemodules(){

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

}

0

Cela fonctionne vraiment bien

find . -name "node_modules" -exec rm -rf '{}' +

2
Ceci est un double des réponses précédentes, mais sans explication.
moopet le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.