171 votes

Suppression du dossier node_modules de manière récursive à partir d'un chemin spécifié en utilisant la ligne de commande

J'ai plusieurs projets npm enregistrés dans un répertoire local. Maintenant, je veux faire une sauvegarde de mes projets sans l'aide de l'outil de sauvegarde. node_modules car il prend beaucoup d'espace et peut également être récupéré à tout moment à l'aide de la fonction 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é en utilisant l'interface de ligne de commande. Toute suggestion ou aide est la bienvenue.

431voto

Darius M. Points 411

Imprime la liste des répertoires à supprimer :

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

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

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

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

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

41 votes

-prune est une optimisation importante. On trouvera des cas où il n'est pas nécessaire de récursionner dans node_module répertoires (pour rechercher les modules de nœuds imbriqués)

1 votes

Pour un projet, j'obtiens /node_modules/gulp-server-livereload/node_modules: Directory not empty dans un grand nombre de dossiers "internes" de node_modules. Comment contourner ce problème ?

38 votes

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

89voto

jeckep Points 687

Essayez https://github.com/voidcosmos/npkill

npx npkill

il trouvera tous les node_modules et vous permettra de les supprimer.

npkill

6 votes

Une meilleure option que ci-dessus car j'ai généralement 2 ou 3 projets pour lesquels je veux garder les node_modules intacts.

0 votes

Cela devrait être le commentaire principal !

1 votes

Je préfère détruire tous les dossiers et les réinstaller si nécessaire. Qui a le temps de choisir et de sélectionner manuellement ?

56voto

Sidharth Points 475

Améliorer la réponse acceptée,

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

J'ai trouvé que la commande prenait beaucoup de temps pour récupérer tous les dossiers et ensuite exécuter une commande de suppression, pour rendre la commande résumable je suggère d'utiliser \; et pour voir la progression de la commande en cours d'exécution, utilisez -print pour voir le répertoire en cours de suppression.

Nota: Vous devez d'abord cd dans le répertoire racine, puis exécutez la commande ou au lieu de find . utiliser find {project_directory}

Pour supprimer les 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 '{}' \;

Edit :

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

npx npkill

1 votes

Belle amélioration de la réponse acceptée @Sidharth, très appréciée.

0 votes

Bon travail @Sidharth

0 votes

Pour (ma propre) référence future - je voulais supprimer le contenu de node_modules mais laisser les répertoires en place (pour les ajouter à une liste d'ignorés Dropbox plus tard). Cela fonctionne pour moi : find . -name 'node_modules' -type d -prune -print -exec bash -c 'rm -rf "$0"/* "$0"/..?* "$0"/.[!.]*' {} \; Les caractères génériques permettent de faire correspondre les fichiers et les dossiers cachés (commençant par .), comme indiqué dans le tableau ci-dessous. unix.stackexchange.com/a/77313/486273

12voto

Sumit Points 442

J'ai trouvé cette solution,

  • trouvez d'abord le dossier en utilisant find et spécifier 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 les dossiers de manière récursive

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

4voto

Ivan V. Points 4134

bash pour supprimer la fonction node_modules . Il supprimera tous les node_modules répertoires récursivement à partir du répertoire de travail actuel, tout en imprimant les chemins trouvés.

Vous devez juste mettre quelque part dans votre $PATH

rmnodemodules(){

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

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X