নোড.জেএস-তে ডিরেক্টরি না সরিয়ে ডিরেক্টরি থেকে সমস্ত ফাইল কীভাবে সরিয়ে ফেলা যায়


101

নোড.জেএস ব্যবহার করে কোনও ডিরেক্টরি নিজেই মুছে না ফেলে ডিরেক্টরি থেকে সমস্ত ফাইল সরিয়ে ফেলবেন কীভাবে?
আমি অস্থায়ী ফাইলগুলি সরাতে চাই। আমি এখনও ফাইল সিস্টেমের সাথে ভাল নই।

আমি এই পদ্ধতিটি পেয়েছি , যা ফাইল এবং ডিরেক্টরি মুছে ফেলবে। এটির মতো কিছু /path/to/directory/*কাজ করবে না।

কমান্ডগুলি ব্যবহার করা উচিত তা আমি সত্যিই জানি না। সাহায্যের জন্য ধন্যবাদ.


4
আপনি যদি ওয়াইল্ডকার্ড ব্যবহার করতে চান তবে npmjs.org/package/glob দেখুন
ফেলিক্স ক্লিং

4
শুধু এপিআই তাকান, এটি এত কঠিন কি? আপনাকে একটি ডিরেক্টরিতে ফাইলগুলি পেতে হবে এবং তারপরে সেগুলি মুছতে হবে।
সিকোরস্কি

4
গ্লোব কাজটি করেছেন, আপনাকে ধন্যবাদ!
youbetternot

উত্তর:


161

ডিরেক্টরি থেকে সমস্ত ফাইল সরাতে প্রথমে আপনাকে ডিরেক্টরিতে সমস্ত ফাইল ব্যবহার করে তালিকা তৈরি করতে হবে 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

4
2p যোগ করার জন্য।, স্নিপেট মহান ও মনে রাখতে হবে শুধুমাত্র এক জিনিস এটি ASYNC হয় এবং স্ক্রিপ্টিং ইন / অটোমেশন ক্ষেত্রে আপনি তা সমকালীন সংস্করণ ব্যবহার করতে চাইতে পারেন fs.readdirSync। কেবলমাত্র সমস্ত ফাইল বরাদ্দ করুন: const files = fs.readdirSync(directory);এবং একইভাবে লুপ করুন for (const file of files) {
শে

কিভাবে ফোল্ডারের বাদ দেওয়ার ".git" মধ্যে "টেস্ট" ডিরেক্টরির?
সার্ভেন্ট

এই কেসটি সরাতে আপনি লুপটিতে একটি বিবৃতি যোগ করতে পারেন, তবে আপনি যদি ফাইল এবং ফোল্ডারগুলি পুনরাবৃত্তভাবে মুছে ফেলতে চান তবে আপনি কিছু এনপিএম প্যাকেজ ব্যবহার করতে পারেন। npmjs.com/package/fs-extra
রডরিগো 5244

45

হ্যাঁ, একটি মডিউল fs- অতিরিক্ত আছে.emptyDir()এই মডিউলটির ভিতরে একটি পদ্ধতি রয়েছে যা কাজটি করে। এখানে একটি উদাহরণ:

const fsExtra = require('fs-extra')

fsExtra.emptyDirSync(fileDir)

এই মডিউলটির একটি অ্যাসিনক্রোনাস সংস্করণও রয়েছে। যে কেউ লিঙ্কটি পরীক্ষা করে দেখতে পারেন।


4
খুব দরকারী মডিউল, আপনার এটি চেষ্টা করা উচিত, আপনি নিশ্চিতরূপে পছন্দ করবেন প্রচুর সম্ভাবনা রয়েছে sure
gts 20'19

4
হ্যাঁ, কেন এমন কিছু কার্যকর করা যা তুচ্ছ নয়।
manuman94

4
কেবলমাত্র একটি সতর্কবার্তা, এইভাবে প্রশ্নের পছন্দসই আচরণের তুলনায় কিছুটা আলাদা আচরণ রয়েছে, কারণ emptyDirফাংশনটি যদি না থাকে তবে ডিরেক্টরিটি তৈরি করে।
প্রোগ্রামাররাজ

35

রিমরাফ নামে একটি প্যাকেজ রয়েছে যা খুব সহজ। এটি নোডের জন্য UNIX কমান্ড rm -rf।

তবুও এটি খুব শক্তিশালী হতে পারে কারণ আপনি এটি ব্যবহার করে খুব সহজেই ফোল্ডারগুলি মুছতে পারেন। নিম্নলিখিত কমান্ডগুলি ফোল্ডারের ভিতরে থাকা ফাইলগুলি মুছবে। আপনি * টি সরিয়ে ফেললে আপনি লগ ফোল্ডারটি সরিয়ে ফেলবেন।

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

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


আইএমও, কোন ফাংশন দিয়ে কী সমাধান করা যায় তা প্যাকেজ দিয়ে কখনই সমাধান করা উচিত নয়।
আদিত্য আনন্দ

4
@ আদিত্যআনন্দ - কী কাজ? কিছু প্যাকেজ আমদানি করা বা নিজের দ্বারা একটি টন কোড না লিখে অসম্ভব
ভাইসাইক

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();

4
দুর্দান্ত! আমি ফোল্ডারে নির্দিষ্ট ফাইলটি রাখতে চাইলে কেবল যা অনুসন্ধান
করছিলাম

4
return await Promiseঅপ্রয়োজনীয় কেবল একটি নোট । আপনি ঠিক করতে পারেন return PromisetoRunফাংশন ASYNC, তাই যখন একটা প্রতিজ্ঞা ফিরিয়ে দেওয়া হয়, অ্যাপ্লিকেশন যে অপেক্ষা করতে পারেন।
ইতালিপালে আলে

আপনি এখন const { promises: fs } = require('fs');নোড 10+ থেকে বিশ্বাস করতে পারেন আমি বিশ্বাস করি।
শিকিও

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.