कमांड लाइन का उपयोग करके एक निर्दिष्ट पथ से पुनरावर्ती रूप से node_modules फ़ोल्डर हटाएं


100

मेरे पास एक स्थानीय निर्देशिका में कई एनपीएम परियोजनाएं बची हैं। अब मैं node_modulesफ़ोल्डर के बिना अपनी परियोजनाओं का बैकअप लेना चाहता हूं , क्योंकि यह बहुत अधिक स्थान ले रहा है और किसी भी समय उपयोग करके पुनर्प्राप्त किया जा सकता है npm install

इसलिए, मुझे कमांड लाइन इंटरफेस का उपयोग करके निर्दिष्ट पथ से पुनरावर्ती सभी नोड_मॉडल फ़ोल्डर को हटाने की आवश्यकता है। कोई भी सुझाव / मदद अत्यधिक प्रशंसनीय है।

जवाबों:


239

हटाई जाने वाली निर्देशिकाओं की सूची का प्रिंट आउट लें:

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

वर्तमान कार्यशील निर्देशिका से निर्देशिकाएं हटाएं:

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

वैकल्पिक रूप से आप मंचन हटाने के लिए कचरा ( brew install trash) का उपयोग कर सकते हैं :

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

27
-pruneएक महत्वपूर्ण अनुकूलन है। यह node_moduleनिर्देशिकाओं में पुनर्खरीद नहीं करने का मामला पाएगा (नेस्टेड नोड_मॉड्यूल्स देखने के लिए)
एंजाइम

1
एक परियोजना के लिए, मुझे /node_modules/gulp-server-livereload/node_modules: Directory not emptyबहुत सारे "इनर" नोड_मॉडल फोल्डर मिलते हैं। इसे कैसे हल करें?
जोसेमिग्लस

15
यह ऐसा है, मैं गंभीर हूं, 20 वीं बार मैं इस कोड को कॉपी करने के लिए इस उत्तर पर हूं ... xD
सिपाई

6
का अर्थ क्या है '{}' +?
रॉकीट

3
{}एक प्लेसहोल्डर है जो findफ़ाइल पथ के साथ प्रतिस्थापित करता है जो इसे मिला। प्रत्येक के लिए चलने के बजाय सभी फ़ाइल पथों को एक ही कमांड में जोड़ना +बताता findहै rm
तमलिन

26

स्वीकृत उत्तर पर सुधार,

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

मैंने पाया कि सभी फ़ोल्डरों को लाने और फिर डिलीट कमांड चलाने के लिए कमांड बहुत लंबे समय तक चलेगी, कमांड को फिर से \;उपयोग -printकरने योग्य बनाने के लिए और निर्देशिका को डिलीट होते देखने के लिए कमांड रन की प्रगति का उपयोग करने के लिए सुझाव दूंगा ।

नोट: आपको पहले cdरूट डायरेक्टरी में जाना होगा और फिर कमांड या find .उपयोग के बजाय रन करना होगाfind {project_directory}

एक-एक करके फोल्डर को डिलीट करना

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

एक-एक करके फोल्डर को डिलीट करना और डिलीट होने वाले फोल्डर को प्रिंट करना

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

संपादित करें:

जिन लोगों को ऐसा करने का इंटरेक्टिव तरीका पसंद है, उनके लिए @ जेकैप उत्तर देखें, इसे उस डायरेक्टरी में चलाएं जिसे आप प्रून करना चाहते हैं।

npx npkill

स्वीकृत उत्तर @ सिधार्थ पर अच्छा सुधार, बहुत सराहना की गई
nclarx


11

मैं इस समाधान के साथ आया हूँ,

  • पहले फ़ोल्डर का उपयोग करके फ़ोल्डर ढूंढें findऔर नाम निर्दिष्ट करें।
  • हटाएं कमांड को पुनरावर्ती रूप से निष्पादित करें -exec rm -rf '{}' +

पुनरावर्ती फ़ोल्डर को हटाने के लिए निम्न आदेश चलाएँ

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


1

यह वास्तव में अच्छी तरह से काम करता है

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

2
यह पिछले उत्तरों की एक डुप्लिकेट है, केवल बिना किसी स्पष्टीकरण के।
मोपेट

1

bashनिकालने का कार्य node_modules। यह सभी node_modulesकार्य निर्देशिकाओं को वर्तमान कार्य निर्देशिका से हटा देगा , जबकि पाया गया पथ मुद्रित करता है।

आपको बस अपने अंदर कहीं रखने की जरूरत है $PATH

rmnodemodules(){

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

}

0

जब Windows पर, मैं वर्तमान फ़ोल्डर से पुनरावर्ती .BATको हटाने के लिए निम्न फ़ाइल का उपयोग करता हूं node_modules:

@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q) 

या, द्वारा CMD.EXE:

cmd.exe /c "@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q)"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.