Node.js में निर्देशिका को हटाने के बिना निर्देशिका से सभी फ़ाइलों को निकालने के लिए कैसे करें


106

Node.js का उपयोग करके एक निर्देशिका को हटाने के बिना निर्देशिका से सभी फ़ाइलों को कैसे निकालें?
मैं अस्थायी फाइलें निकालना चाहता हूं। मैं अभी तक फाइल सिस्टम के साथ अच्छा नहीं हूं।

मुझे यह तरीका मिल गया है, जो फाइलों और निर्देशिका को हटा देगा। उस में, जैसे कुछ /path/to/directory/*काम नहीं करेगा।

मैं वास्तव में नहीं जानता कि कमांड का क्या उपयोग करना चाहिए। सहायता के लिए धन्यवाद।


2
यदि आप वाइल्डकार्ड का उपयोग करना चाहते हैं, तो npmjs.org/package/glob देखें
फेलिक्स क्लिंग

1
बस अपी को देखो, इसमें इतनी मेहनत क्या है? आपको फ़ाइलों को एक निर्देशिका में प्राप्त करना होगा और फिर उन्हें हटाना होगा।
सिकोरस्की

2
ग्लोब ने किया काम, धन्यवाद!
youbetternot

जवाबों:


169

किसी डायरेक्टरी से सभी फाइल्स को हटाने के लिए, सबसे पहले आपको डाइरेक्टरी में मौजूद सभी फाइल्स को लिस्ट करना होगा fs.readdir, फिर आप fs.unlinkहर फाइल को हटाने के लिए इस्तेमाल कर सकते हैं । इसके अलावा fs.readdir, आप केवल फ़ाइल नाम देंगे, आपको पूर्ण पथ प्राप्त करने के लिए निर्देशिका नाम के साथ संक्षिप्त करना होगा।

यहाँ एक उदाहरण है

const fs = require('fs');
const path = require('path');

const directory = 'test';

fs.readdir(directory, (err, files) => {
  if (err) throw err;

  for (const file of files) {
    fs.unlink(path.join(directory, file), err => {
      if (err) throw err;
    });
  }
});

अद्यतन संस्करण 14

एक recursiveध्वज है जिसका उपयोग आप rmdirसभी फ़ाइलों को पुनरावर्ती रूप से निकालने के लिए कर सकते हैं । अधिक जानकारी के लिए नोडज डॉक्स देखें ।

const fs = require('fs').promises;

const directory = 'test';

fs.rmdir(directory, { recursive: true })
  .then(() => console.log('directory removed!'));

4
यह बहुत अच्छा काम करता है, और अधिकांश के पास पहले से ही fs और पथ की आवश्यकता होगी ताकि एक बोनस, अतिरिक्त पैकेज की आवश्यकता न हो। मैं सिर्फ path.join (__ dirname, '../../public/uploads') के लिए 'परीक्षण' बदली
russiansummer

3
2p जोड़ने के लिए।, टुकड़ा महान है और ध्यान में रखने के लिए केवल एक ही बात है कि यह async है और पटकथा में / स्वचालन मामलों आप, इसके बारे में तुल्यकालिक संस्करण का उपयोग करना चाह सकते हैं fs.readdirSync। बस सभी फ़ाइलों को असाइन करें: const files = fs.readdirSync(directory);और उसी तरह लूप करें for (const file of files) {
20

"परीक्षण" निर्देशिका में फ़ोल्डर ".गित" को बाहर कैसे करें ?
ग्रीट

आप उस मामले को हटाने के लिए लूप के लिए एक स्टेटमेंट जोड़ सकते हैं, लेकिन यदि आप फ़ाइलों और फ़ोल्डरों को फिर से निकालना चाहते हैं, तो आप कुछ npm पैकेज का उपयोग करना चाह सकते हैं। npmjs.com/package/fs-extra
Rodrigo5244

नोट: fs.promises.rmdir में पुनरावर्ती ध्वज को हटा दिया गया है और भविष्य में त्रुटियों को दूर करेगा।
msg45f

49

हाँ, एक मॉड्यूल fs-extra है.emptyDir()इस मॉड्यूल के अंदर एक विधि है जो काम करती है। यहाँ एक उदाहरण है:

const fsExtra = require('fs-extra')

fsExtra.emptyDirSync(fileDir)

इस मॉड्यूल का एक अतुल्यकालिक संस्करण भी है। लिंक को कोई भी देख सकता है।


3
बहुत उपयोगी मॉड्यूल, आपको इसे आज़माना चाहिए, ऐसे बहुत सारे फ़ैन्टरोट हैं जिन्हें आप निश्चित रूप से पसंद करेंगे।
gts

1
हां, कुछ ऐसा क्यों लागू करना जो तुच्छ नहीं है।
manuman94

2
बस थोड़ी चेतावनी, इस तरह से प्रश्न के वांछित व्यवहार की तुलना में थोड़ा अलग व्यवहार है, क्योंकि emptyDirफ़ंक्शन निर्देशिका को बनाता है यदि यह मौजूद नहीं है।
प्रोग्रामरराज

36

वहाँ rimraf नामक पैकेज है जो बहुत काम आता है। यह नोड के लिए UNIX कमांड rm -rf है।

फिर भी, यह बहुत शक्तिशाली भी हो सकता है क्योंकि आप इसका उपयोग करके बहुत आसानी से फ़ोल्डर हटा सकते हैं। निम्न आदेश फ़ोल्डर के अंदर फ़ाइलों को हटा देगा। यदि आप * निकालते हैं, तो आप लॉग फ़ोल्डर को हटा देंगे।

const rimraf = require('rimraf');
rimraf('./log/*', function () { console.log('done'); });

https://www.npmjs.com/package/rimraf


IMO, एक फ़ंक्शन के साथ क्या हल किया जा सकता है, कभी भी पैकेज के साथ हल नहीं किया जाना चाहिए।
आदित्य आनंद

1
@ आदित्यआनंद - क्या कार्य? कुछ पैकेज को आयात किए बिना या अपने द्वारा कोड का एक टन लिखना असंभव है
vsync

12

@ वाटरर्सक्रोल की प्रतिक्रिया पर बिल्डिंग, यदि आप एसिंक्स का उपयोग करना चाहते हैं और नोड 8 में इंतजार कर रहे हैं:

const fs = require('fs');
const util = require('util');
const readdir = util.promisify(fs.readdir);
const unlink = util.promisify(fs.unlink);
const directory = 'test';

async function toRun() {
  try {
    const files = await readdir(directory);
    const unlinkPromises = files.map(filename => unlink(`${directory}/${filename}`));
    return Promise.all(unlinkPromises);
  } catch(err) {
    console.log(err);
  }
}

toRun();

1
महान! बस मैं क्या खोज रहा था जैसा कि मैं फ़ोल्डर में विशिष्ट फ़ाइल पर रखना चाहता हूं: D
Silve2611

1
सिर्फ एक नोट जो return await Promiseबेमानी है। आप बस कर सकते हैं return PromisetoRunसमारोह async है, इसलिए जब एक वादा दिया जाता है, एप्लिकेशन उस पर इंतजार कर सकते हैं।
इटलीपेलएले

अब आप const { promises: fs } = require('fs');नोड 10+ से उपयोग कर सकते हैं मेरा मानना ​​है।
शिकोय

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.