Löschen Sie den Ordner node_modules rekursiv über die Befehlszeile aus einem angegebenen Pfad

92

Ich habe mehrere npm-Projekte in einem lokalen Verzeichnis gespeichert. Jetzt möchte ich eine Sicherungskopie meiner Projekte ohne den node_modulesOrdner erstellen, da dieser viel Speicherplatz beansprucht und auch jederzeit mit abgerufen werden kann npm install.

Daher benötige ich eine Lösung, um alle Ordner node_modules über die Befehlszeilenschnittstelle rekursiv aus einem angegebenen Pfad zu löschen. Anregungen / Hilfe ist sehr dankbar.

Sumit
quelle

Antworten:

222

Drucken Sie eine Liste der zu löschenden Verzeichnisse aus:

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

Löschen Sie Verzeichnisse aus dem aktuellen Arbeitsverzeichnis:

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

Alternativ können Sie trash ( brew install trash) zum schrittweisen Löschen verwenden:

find . -name node_modules -type d -prune -exec trash {} +
Darius
quelle
26
-pruneist eine wichtige Optimierung. Es wird Fall finden, nicht in node_moduleVerzeichnisse zu rekursieren (um nach verschachtelten node_modules zu suchen)
rzymek
1
Für ein Projekt bekomme ich /node_modules/gulp-server-livereload/node_modules: Directory not emptyviele "innere" node_modules-Ordner. Wie kann man das umgehen?
Josemigallas
15
Dies ist wie, ich meine es ernst, das 20. Mal, dass ich bei dieser Antwort bin, um diesen Code zu kopieren ... xD
Cipi
6
Was bedeutet das '{}' +?
Rokit
3
{}ist ein Platzhalter, der finddurch den gefundenen Dateipfad ersetzt wird. +weist findan, alle Dateipfade an einen einzelnen Befehl anzuhängen, anstatt rmfür jeden ausgeführt zu werden.
Tamlyn
24

Verbesserung der akzeptierten Antwort,

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

Ich stellte fest, dass der Befehl sehr lange ausgeführt werden würde, um alle Ordner abzurufen und dann einen Löschbefehl auszuführen. Um den Befehl wieder aufzunehmen, würde ich vorschlagen, den zu löschenden Verzeichnis zu verwenden \;und den Fortschritt des ausgeführten Befehls anzuzeigen -print.

Hinweis: Sie müssen zuerst cdin das Stammverzeichnis wechseln und dann den Befehl ausführen oder ihn nicht find .verwendenfind {project_directory}

Ordner nacheinander löschen

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

Ordner einzeln löschen und den zu löschenden Ordner drucken

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

Bearbeiten:

Für die Personen, die eine interaktive Methode mögen, lesen Sie die Antwort unter @jeckep. Führen Sie diese in dem Verzeichnis aus, das Sie beschneiden möchten.

npx npkill
Sidharth
quelle
Schöne Verbesserungen an der akzeptierten Antwort @Sidharth, sehr geschätzt
nclarx
10

Ich bin auf diese Lösung gestoßen,

  • Suchen Sie zuerst den Ordner mit findund geben Sie den Namen des Ordners an.
  • Löschbefehl rekursiv ausführen -exec rm -rf '{}' +

Führen Sie den folgenden Befehl aus, um Ordner rekursiv zu löschen

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

Sumit
quelle
1

bashFunktion zu entfernen node_modules. Alle node_modulesVerzeichnisse werden rekursiv aus dem aktuellen Arbeitsverzeichnis entfernt, während gefundene Pfade gedruckt werden.

Sie müssen nur irgendwo in Ihre setzen $PATH

rmnodemodules(){

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

}
Ivan V.
quelle
0

Das funktioniert wirklich gut

find . -name "node_modules" -exec rm -rf '{}' +
Ankit Sinha
quelle
2
Dies ist ein Duplikat früherer Antworten, nur ohne Erklärung.
Moopet