Hapus folder node_modules secara rekursif dari jalur yang ditentukan menggunakan baris perintah

92

Saya memiliki beberapa proyek npm yang disimpan di direktori lokal. Sekarang saya ingin mengambil cadangan proyek saya tanpa node_modulesfolder, karena memakan banyak ruang dan juga dapat diambil kapan saja dengan menggunakan npm install.

Jadi, saya memerlukan solusi untuk menghapus semua folder node_modules secara rekursif dari jalur yang ditentukan menggunakan antarmuka baris perintah. Setiap saran / bantuan sangat berarti.

Sumit
sumber

Jawaban:

225

Cetak daftar direktori yang akan dihapus:

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

Hapus direktori dari direktori kerja saat ini:

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

Atau Anda dapat menggunakan sampah ( brew install trash) untuk penghapusan bertahap:

find . -name node_modules -type d -prune -exec trash {} +
Darius
sumber
26
-pruneadalah pengoptimalan yang penting. Ini akan kasus menemukan untuk tidak berulang ke node_moduledirektori (untuk mencari node_modules bersarang)
rzymek
1
Untuk sebuah proyek, saya mendapatkan /node_modules/gulp-server-livereload/node_modules: Directory not emptybanyak folder node_modules "dalam". Bagaimana cara mengatasinya?
josemigallas
15
Ini seperti, saya serius, ke-20 kalinya saya ada di jawaban ini untuk menyalin kode ini ... xD
Cipi
6
Apa arti dari '{}' +?
Rokit
3
{}adalah placeholder yang findmenggantikan dengan jalur file yang ditemukannya. +memberi tahu finduntuk menambahkan semua jalur file ke satu perintah daripada menjalankan rmmasing-masing.
Tamlyn
25

Memperbaiki jawaban yang diterima,

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

Saya menemukan bahwa perintah akan berjalan sangat lama untuk mengambil semua folder dan kemudian menjalankan perintah delete, untuk membuat perintah dapat dilanjutkan, saya sarankan untuk menggunakan \;dan untuk melihat kemajuan perintah yang dijalankan gunakan -printuntuk melihat direktori yang dihapus.

Catatan: Anda harus terlebih dahulu cdmasuk ke direktori root lalu menjalankan perintah atau alih-alih find .menggunakanfind {project_directory}

Untuk menghapus folder satu per satu

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

Untuk menghapus folder satu per satu dan mencetak folder yang sedang dihapus

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

Edit:

Untuk orang-orang yang menyukai cara interaktif untuk melakukan ini, lihat jawaban @jeckep, jalankan ini di direktori yang ingin Anda pangkas.

npx npkill
Sidharth
sumber
Peningkatan yang bagus pada jawaban yang diterima @Sidharth, sangat dihargai
nclarx
10

Saya telah menemukan solusi ini,

  • pertama temukan foldernya menggunakan finddan tentukan nama foldernya.
  • jalankan perintah delete secara rekursif -exec rm -rf '{}' +

jalankan perintah berikut untuk menghapus folder secara rekursif

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

Sumit
sumber
1

bashberfungsi untuk menghapus node_modules. Ini akan menghapus semua node_modulesdirektori secara rekursif dari direktori kerja saat ini, sambil mencetak jalur yang ditemukan.

Anda hanya perlu meletakkannya di suatu tempat di $PATH

rmnodemodules(){

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

}
Ivan V.
sumber
0

Ini bekerja dengan sangat baik

find . -name "node_modules" -exec rm -rf '{}' +
Ankit Sinha
sumber
2
Ini adalah duplikat dari jawaban sebelumnya, hanya tanpa penjelasan.
moopet