Komut satırını kullanarak node_modules klasörünü belirtilen yoldan özyinelemeli olarak silin


92

Yerel bir dizine kaydedilmiş birden çok npm projem var. Artık node_modulesçok fazla yer kapladığından ve kullanılarak herhangi bir zamanda geri alınabildiğinden , klasörler olmadan projelerimin yedeğini almak istiyorum npm install.

Bu nedenle, komut satırı arayüzünü kullanarak tüm node_modules klasörlerini belirtilen bir yoldan özyinelemeli olarak silmek için bir çözüme ihtiyacım var. Herhangi bir öneri / yardım çok takdire şayan.

Yanıtlar:


224

Silinecek dizinlerin bir listesini yazdırın:

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

Dizinleri mevcut çalışma dizininden silin:

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

Alternatif olarak , aşamalı silme için trash ( brew install trash) kullanabilirsiniz :

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

26
-pruneönemli bir optimizasyondur. İçine Recurse değil bulmak vaka edeceğiz node_module(iç içe node_modules için görünüm) dizinlere
rzymek

1
Bir proje için, /node_modules/gulp-server-livereload/node_modules: Directory not emptybirçok "iç" node_modules klasörüne giriyorum. Bunu nasıl çözebilirim?
josemigallas

15
Bu, ciddiyim, 20. kez bu kodu kopyalamak için bu cevaba geldim ... xD
Cipi

6
Ne anlama geliyor '{}' +?
Rokit

3
{}findbulduğu dosya yolu ile değiştirilen bir yer tutucudur . her biri için çalıştırmak yerine tüm dosya yollarını tek bir komuta eklemeyi +söyler . findrm
Tamlyn

24

Kabul edilen cevabı geliştirmek,

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

Komutun tüm klasörleri almak için çok uzun bir süre çalıştığını ve ardından bir silme komutunu çalıştırdığını, komutu devam ettirilebilir hale getirmek için kullanmayı \;ve çalıştırılan komutun ilerlemesini -printgörmek için silinen dizini görmek için kullanın .

Not: Önce cdkök dizine girmeli ve ardından komutu çalıştırmalı veya find .kullanmak yerinefind {project_directory}

Klasörleri tek tek silmek için

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

Klasörleri tek tek silmek ve silinen klasörü yazdırmak için

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

Düzenle:

Bunu yapmanın interaktif yolunu sevenler için @jeckep cevabına bakın, bunu budamak istediğiniz dizinde çalıştırın.

npx npkill

Kabul edilen yanıtta güzel iyileştirmeler @Sidharth, çok takdir edildi
nclarx


10

Bu çözüme rastladım,

  • önce kullanarak klasörü bulun ve klasörün findadını belirtin.
  • silme komutunu yinelemeli olarak yürüt -exec rm -rf '{}' +

klasörleri yinelemeli olarak silmek için aşağıdaki komutu çalıştırın

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


1

bashkaldırmak için işlev node_modules. node_modulesBulunan yolları yazdırırken tüm dizinleri geçerli çalışma dizininden özyinelemeli olarak kaldıracaktır .

Sadece senin içinde bir yere koymalısın $PATH

rmnodemodules(){

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

}

0

Bu gerçekten iyi çalışıyor

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

2
Bu, önceki cevapların bir kopyasıdır, sadece açıklaması yoktur.
moopet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.