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.