উত্তর:
এটির জন্য একটি মডিউল রয়েছে rimraf
( https://npmjs.org/package/rimraf )। এটি একই কার্যকারিতা সরবরাহ করেrm -Rf
অ্যাসিঙ্ক ব্যবহার:
var rimraf = require("rimraf");
rimraf("/some/directory", function () { console.log("done"); });
সিঙ্ক ব্যবহার:
rimraf.sync("/some/directory");
deleteFolderRecursive
নীচের উত্তর হিসাবে?
recursive
: বিকল্প stackoverflow.com/a/57866165/6269864
একযোগে ফোল্ডার অপসারণ করতে
const fs = require('fs');
const Path = require('path');
const deleteFolderRecursive = function(path) {
if (fs.existsSync(path)) {
fs.readdirSync(path).forEach((file, index) => {
const curPath = Path.join(path, file);
if (fs.lstatSync(curPath).isDirectory()) { // recurse
deleteFolderRecursive(curPath);
} else { // delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
};
var curPath = path + "/" + file;
সঙ্গে var curPath = p.join(path, file);
প্রদান করা আপনি পাথ মডিউল অন্তর্ভূক্ত করেছেন:var p = require("path")
path.join(dirpath, file)
চেয়ে ভাল হওয়া উচিতpath + "/" + file
fs
নোড.জেএস ব্যবহার করে বেশিরভাগ লোকেরা ফাইলগুলি নিয়ে কাজ করার "ইউনিক্স ওয়ে" এর কাছাকাছি ফাংশন চান। আমি শীতল সমস্ত জিনিস আনতে fs- অতিরিক্ত ব্যবহার করছি :
এফএস-এক্সট্রা পদ্ধতিতে ভ্যানিলা নোড.জেএস এফএস প্যাকেজ অন্তর্ভুক্ত নয় এমন পদ্ধতি রয়েছে। যেমন mkdir -p, cp -r, এবং rm -rf।
আরও ভাল, fs- অতিরিক্ত হল নেটিভ fs এর প্রতিস্থাপনের ড্রপ। এফএস-এর সমস্ত পদ্ধতি অ-সংশোধিত এবং এর সাথে সংযুক্ত। এর অর্থ হল আপনি fs-অতিরিক্ত দ্বারা fs প্রতিস্থাপন করতে পারেন :
// this can be replaced
const fs = require('fs')
// by this
const fs = require('fs-extra')
এবং তারপরে আপনি এইভাবে কোনও ফোল্ডারটি মুছে ফেলতে পারেন:
fs.removeSync('/tmp/myFolder');
//or
fs.remove('/tmp/myFolder', callback);
removeSync('/tmp/myFolder')
এর মতো Node.js 12.10.0 , fs.rmdirSync
একটি সমর্থন recursive
, বিকল্প যাতে আপনি পরিশেষে করতে পারেন:
fs.rmdirSync(dir, { recursive: true });
যেখানে recursive
অপশনটি পুরো ডিরেক্টরিটিকে পুনরাবৃত্তভাবে মুছে দেয়।
recursive: true
এবং অভিযোগ ছাড়াই খালি খালি ফোল্ডারগুলি মুছে দেয়।
fs.rmdir(path[, options], callback)
বাfs.rmdirSync(path[, options])
fs.rmdir
স্থায়িত্ব 1. "স্থিতিশীলতার সঙ্গে পরীক্ষামূলক। 1 - পরীক্ষামূলক বৈশিষ্ট্য শব্দার্থিক ভারশনিং বিধি সাপেক্ষে নয় অ অনগ্রসর সামঞ্জস্যপূর্ণ পরিবর্তন বা অপসারণ কোন ঘটতে পারে। ভবিষ্যতে মুক্তি। উত্পাদন পরিবেশে বৈশিষ্ট্যটির ব্যবহারের প্রস্তাব দেওয়া হয় না। "
@Oconnecp থেকে আমার পরিবর্তিত উত্তর ( https://stackoverflow.com/a/25069828/3027390 )
আরও ভাল ক্রস প্ল্যাটফর্ম অভিজ্ঞতার জন্য path.join ব্যবহার করে। সুতরাং, এটি প্রয়োজন ভুলবেন না
var path = require('path');
এতে ফাংশনটির নতুন নামকরণও করা হয়েছে rimraf
;)
/**
* Remove directory recursively
* @param {string} dir_path
* @see https://stackoverflow.com/a/42505874/3027390
*/
function rimraf(dir_path) {
if (fs.existsSync(dir_path)) {
fs.readdirSync(dir_path).forEach(function(entry) {
var entry_path = path.join(dir_path, entry);
if (fs.lstatSync(entry_path).isDirectory()) {
rimraf(entry_path);
} else {
fs.unlinkSync(entry_path);
}
});
fs.rmdirSync(dir_path);
}
}
আমি সাধারণত পুরানো থ্রেডগুলিকে পুনরুত্থিত করি না তবে এখানে প্রচুর মন্থর আছে এবং রিমরাফের উত্তরটি সান করেছে এটি আমার কাছে অত্যধিক জটিল বলে মনে হচ্ছে।
আধুনিক নোডে প্রথমে (> = v8.0.0) আপনি কেবল নোড কোর মডিউলগুলি ব্যবহার করে প্রক্রিয়াটি সহজ করতে পারেন, সম্পূর্ণ অবিচ্ছিন্ন এবং পাঁচটি লাইনের ফাংশনে একই সাথে সমস্ত ফাইলের লিঙ্ককে সমান্তরাল করতে পারেন এবং এখনও পাঠযোগ্যতা রাখতে পারেন:
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const readdir = promisify(fs.readdir);
const rmdir = promisify(fs.rmdir);
const unlink = promisify(fs.unlink);
exports.rmdirs = async function rmdirs(dir) {
let entries = await readdir(dir, { withFileTypes: true });
await Promise.all(entries.map(entry => {
let fullPath = path.join(dir, entry.name);
return entry.isDirectory() ? rmdirs(fullPath) : unlink(fullPath);
}));
await rmdir(dir);
};
অন্য নোটে পথ ট্র্যাভারসাল আক্রমণগুলির জন্য একজন প্রহরী এই ফাংশনটির জন্য অনুপযুক্ত কারণ
rm -rf
যাতে এটি একটি আর্গুমেন্ট নেয় এবং ব্যবহারকারীকে rm -rf /
জিজ্ঞাসা করার অনুমতি দেয় । কোনও স্ক্রিপ্টের দায়িত্ব হবে rm
প্রোগ্রামটি রক্ষা করা নয় ।.isDirectory()
হয় false
sym-লিঙ্ক এবং মধ্যে recursed না লিঙ্কমুক্ত হচ্ছে।কিন্তু শেষ না অন্তত, একটি বিরল জাতি এই শর্তে যে পুনরাবৃত্তির যদি এন্ট্রি এক লিঙ্কমুক্ত বা মোছা হয়েছে ত্রুটি পারে বাহিরে যখন এই পুনরাবৃত্তির চলছে একেবারে সঠিক সময়ে এই স্ক্রিপ্টের। যেহেতু বেশিরভাগ পরিবেশে এই দৃশ্যটি সাধারণ নয়, সম্ভবত এটি উপেক্ষা করা যেতে পারে। তবে, প্রয়োজন হলে (কিছু প্রান্তের ক্ষেত্রে) এই সামান্য জটিল উদাহরণ সহ এই সমস্যাটি প্রশমিত করা যেতে পারে:
exports.rmdirs = async function rmdirs(dir) {
let entries = await readdir(dir, { withFileTypes: true });
let results = await Promise.all(entries.map(entry => {
let fullPath = path.join(dir, entry.name);
let task = entry.isDirectory() ? rmdirs(fullPath) : unlink(fullPath);
return task.catch(error => ({ error }));
}));
results.forEach(result => {
// Ignore missing files/directories; bail on other errors
if (result && result.error.code !== 'ENOENT') throw result.error;
});
await rmdir(dir);
};
সম্পাদনা:isDirectory()
একটি ফাংশন তৈরি করুন । শেষে ডিরেক্টরিটি সরান। অনুপস্থিত পুনরাবৃত্তি ঠিক করুন।
await
আপনার Promise.all(…)
; এই ইচ্ছাকৃত হয়? দেখে মনে হচ্ছে এটির বর্তমান অবস্থায় results.forEach
প্রতিশ্রুতি দিয়ে পুনরাবৃত্তি হবে, যখন কোডটি ফলাফলের মাধ্যমে পুনরাবৃত্তি করবে বলে আশাবাদী। আমি কিছু অনুপস্থিত করছি?
if (!fs.existsSync(dir)) return
readdir
এটি করা উচিত হিসাবে একটি ত্রুটি নিক্ষেপ করবে। যদি আপনি rmdir non-existing-dir
প্রস্থান কোড একটি ত্রুটি হয়। চেষ্টা / ধরার দায়িত্ব ভোক্তার হয়ে উঠবে। নোড ডক্সে বর্ণিত একই পদ্ধতিটি যখন fs ফাংশন ব্যবহার করার ক্ষেত্রে আসে। তারা আশা করে যে আপনি চেষ্টা করবেন / ধরবেন এবং code
কী করবেন তা নির্ধারণ করার জন্য ত্রুটিটি দেখুন । একটি অতিরিক্ত চেক একটি জাতি শর্ত পরিচয় করিয়ে দেয়।
fs.exists
ব্যবহার করা হলে কোন রেসের শর্ত নেই । পিএস এটি একটি দুর্দান্ত সমাধান।
এখানে @ শার্পকোডার এর উত্তরের একটি অ্যাসিঙ্ক সংস্করণ
const fs = require('fs');
const path = require('path');
function deleteFile(dir, file) {
return new Promise(function (resolve, reject) {
var filePath = path.join(dir, file);
fs.lstat(filePath, function (err, stats) {
if (err) {
return reject(err);
}
if (stats.isDirectory()) {
resolve(deleteDirectory(filePath));
} else {
fs.unlink(filePath, function (err) {
if (err) {
return reject(err);
}
resolve();
});
}
});
});
};
function deleteDirectory(dir) {
return new Promise(function (resolve, reject) {
fs.access(dir, function (err) {
if (err) {
return reject(err);
}
fs.readdir(dir, function (err, files) {
if (err) {
return reject(err);
}
Promise.all(files.map(function (file) {
return deleteFile(dir, file);
})).then(function () {
fs.rmdir(dir, function (err) {
if (err) {
return reject(err);
}
resolve();
});
}).catch(reject);
});
});
});
};
আমি এই ফাংশনটি অপসারণ ফোল্ডার নামে লিখেছি। এটি এক অবস্থানের সমস্ত ফাইল এবং ফোল্ডারগুলি পুনরাবৃত্তভাবে মুছে ফেলবে। এটির প্রয়োজন কেবলমাত্র প্যাকেজ অ্যাসিঙ্ক।
var async = require('async');
function removeFolder(location, next) {
fs.readdir(location, function (err, files) {
async.each(files, function (file, cb) {
file = location + '/' + file
fs.stat(file, function (err, stat) {
if (err) {
return cb(err);
}
if (stat.isDirectory()) {
removeFolder(file, cb);
} else {
fs.unlink(file, function (err) {
if (err) {
return cb(err);
}
return cb();
})
}
})
}, function (err) {
if (err) return next(err)
fs.rmdir(location, function (err) {
return next(err)
})
})
})
}
আপনি যদি নোড 8+ ব্যবহার করেন তবে অ্যাসিঙ্ক্রোনসিটি চান এবং বাহ্যিক নির্ভরতা না চান, এখানে অ্যাসিঙ্ক / অপেক্ষার সংস্করণটি রয়েছে:
const path = require('path');
const fs = require('fs');
const util = require('util');
const readdir = util.promisify(fs.readdir);
const lstat = util.promisify(fs.lstat);
const unlink = util.promisify(fs.unlink);
const rmdir = util.promisify(fs.rmdir);
const removeDir = async (dir) => {
try {
const files = await readdir(dir);
await Promise.all(files.map(async (file) => {
try {
const p = path.join(dir, file);
const stat = await lstat(p);
if (stat.isDirectory()) {
await removeDir(p);
} else {
await unlink(p);
console.log(`Removed file ${p}`);
}
} catch (err) {
console.error(err);
}
}))
await rmdir(dir);
console.log(`Removed dir ${dir}`);
} catch (err) {
console.error(err);
}
}
Fs.promises ব্যবহার করে @ শার্পকোডার এর উত্তরের অ্যাসিঙ্ক সংস্করণ :
const fs = require('fs');
const afs = fs.promises;
const deleteFolderRecursive = async path => {
if (fs.existsSync(path)) {
for (let entry of await afs.readdir(path)) {
const curPath = path + "/" + entry;
if ((await afs.lstat(curPath)).isDirectory())
await deleteFolderRecursive(curPath);
else await afs.unlink(curPath);
}
await afs.rmdir(path);
}
};
আমি এখানে পৌঁছানোর চেষ্টা করার সময় এখানে পৌঁছেছি gulp
এবং আমি আরও পৌঁছানোর জন্য লিখছি।
gulp-clean
অবচয় জন্য gulp-rimraf
gulp-rimraf
পক্ষে অবমূল্যায়ন delete-files-folders
আপনি যখন ফাইল এবং ফোল্ডারগুলি ব্যবহার করে মুছতে চান del
, আপনার /**
পুনরাবৃত্ত মোছার জন্য যুক্ত করা উচিত ।
gulp.task('clean', function () {
return del(['some/path/to/delete/**']);
});
ডি ফ্যাক্টো প্যাকেজটি rimraf
তবে এখানে আমার ক্ষুদ্র অ্যাসিঙ্ক সংস্করণটি রয়েছে:
const fs = require('fs')
const path = require('path')
const Q = require('q')
function rmdir (dir) {
return Q.nfcall(fs.access, dir, fs.constants.W_OK)
.then(() => {
return Q.nfcall(fs.readdir, dir)
.then(files => files.reduce((pre, f) => pre.then(() => {
var sub = path.join(dir, f)
return Q.nfcall(fs.lstat, sub).then(stat => {
if (stat.isDirectory()) return rmdir(sub)
return Q.nfcall(fs.unlink, sub)
})
}), Q()))
})
.then(() => Q.nfcall(fs.rmdir, dir))
}
Node.js এর সর্বশেষ সংস্করণ (12.10.0 বা পরবর্তী) সালে rmdir
শৈলী ফাংশন fs.rmdir()
, fs.rmdirSync()
এবং fs.promises.rmdir()
একটি নতুন পরীক্ষামূলক বিকল্প আছে recursive
খালি নয় এমন ডিরেক্টরি মুছে ফেলার অনুমতি দেয়, যেমন
fs.rmdir(path, { recursive: true });
গিটহাব সম্পর্কিত সম্পর্কিত PR: https://github.com/nodejs/node/pull/29168
fs
ডকুমেন্টেশন অনুসারে , fsPromises
বর্তমানে recursive
একটি পরীক্ষামূলক ভিত্তিতে বিকল্প সরবরাহ করা হয়, যা উইন্ডোজে অন্তত আমার নিজের ক্ষেত্রে ডিরেক্টরি এবং এতে কোনও ফাইল সরিয়ে দেয়।
fsPromises.rmdir(path, {
recursive: true
})
না recursive: true
Linux এবং MacOS এর ফাইল সরাবেন?
আল্ট্রা গতি এবং ব্যর্থ-প্রমাণ
আপনি lignator
প্যাকেজটি ব্যবহার করতে পারেন ( https://www.npmjs.com/package/lignator ), এটি কোনও অ্যাসিঙ্ক কোড (যেমন রিম্রাফ) এর চেয়ে দ্রুত এবং আরও ব্যর্থ-প্রমাণ (বিশেষত উইন্ডোজে, যেখানে ফাইল অপসারণ তাত্ক্ষণিক নয় এবং ফাইলগুলি সম্ভবত অন্যান্য প্রক্রিয়া দ্বারা লক করা)।
উইন্ডোতে 4,36 জিবি ডেটা, 28 042 ফাইল, 4 217 ফোল্ডারগুলি 15 সেকেন্ডের মধ্যে রিমরাফের 60 সেকেন্ডে পুরানো এইচডিডি তে সরিয়ে ফেলা হয়েছে ।
const lignator = require('lignator');
lignator.remove('./build/');
সিঙ্ক ফোল্ডার ফাইল বা শুধুমাত্র একটি ফাইল দিয়ে মুছে ফেলুন।
আমি দাতা বা অবদানকারীদের পক্ষে খুব বেশি নই তবে আমি এই সমস্যার একটি ভাল সমাধান খুঁজে পেলাম না এবং আমাকে আমার পথটি সন্ধান করতে হবে ... তাই আমি আশা করি আপনি এটি পছন্দ করবেন :) যে
কোনও সংখ্যক নিয়ে আমার জন্য নিখুঁত কাজ করে নেস্টেড ডিরেক্টরি এবং সাব ডিরেক্টরি। ফাংশন পুনরাবৃত্তি যখন 'এটি' এর সুযোগ জন্য সতর্কতা, আপনার বাস্তবায়ন ভিন্ন হতে পারে। আমার ক্ষেত্রে এই ফাংশনটি অন্য ফাংশনটির ফিরতিতে স্থির থাকে সে কারণেই আমি এটির সাথে এটি কল করছি।
const fs = require('fs');
deleteFileOrDir(path, pathTemp = false){
if (fs.existsSync(path)) {
if (fs.lstatSync(path).isDirectory()) {
var files = fs.readdirSync(path);
if (!files.length) return fs.rmdirSync(path);
for (var file in files) {
var currentPath = path + "/" + files[file];
if (!fs.existsSync(currentPath)) continue;
if (fs.lstatSync(currentPath).isFile()) {
fs.unlinkSync(currentPath);
continue;
}
if (fs.lstatSync(currentPath).isDirectory() && !fs.readdirSync(currentPath).length) {
fs.rmdirSync(currentPath);
} else {
this.deleteFileOrDir(currentPath, path);
}
}
this.deleteFileOrDir(path);
} else {
fs.unlinkSync(path);
}
}
if (pathTemp) this.deleteFileOrDir(pathTemp);
}
যদিও recursive
এর একটি পরীক্ষামূলক বিকল্প রয়েছেfs.rmdir
function rm (path, cb) {
fs.stat(path, function (err, stats) {
if (err)
return cb(err);
if (stats.isFile())
return fs.unlink(path, cb);
fs.rmdir(path, function (err) {
if (!err || err && err.code != 'ENOTEMPTY')
return cb(err);
fs.readdir(path, function (err, files) {
if (err)
return cb(err);
let next = i => i == files.length ?
rm(path, cb) :
rm(path + '/' + files[i], err => err ? cb(err) : next(i + 1));
next(0);
});
});
});
}
2020 আপডেট
সংস্করণ থেকে 12.10.0 পুনরাবৃত্তির বিকল্প বিকল্পের জন্য যুক্ত করা হয়েছে।
দ্রষ্টব্য যে পুনরাবৃত্তি মোছা পরীক্ষামূলক ।
সুতরাং আপনি সিঙ্কের জন্য করবেন:
fs.rmdirSync(dir, {recursive: true});
বা অ্যাসিঙ্কের জন্য:
fs.rmdir(dir, {recursive: true});
শুধু rmdir মডিউল ব্যবহার ! এটি সহজ এবং সহজ
আরেকটি বিকল্প হ'ল fs-promise
মডিউলটি ব্যবহার করছে যা fs-extra
মডিউলগুলির প্রতিশ্রুতিবদ্ধ সংস্করণ সরবরাহ করে
আপনি তাহলে এই উদাহরণের মতো লিখতে পারেন:
const { remove, mkdirp, writeFile, readFile } = require('fs-promise')
const { join, dirname } = require('path')
async function createAndRemove() {
const content = 'Hello World!'
const root = join(__dirname, 'foo')
const file = join(root, 'bar', 'baz', 'hello.txt')
await mkdirp(dirname(file))
await writeFile(file, content)
console.log(await readFile(file, 'utf-8'))
await remove(join(__dirname, 'foo'))
}
createAndRemove().catch(console.error)
দ্রষ্টব্য: async / প্রতীক্ষার জন্য সাম্প্রতিক নোডেজ সংস্করণ (7.6+) প্রয়োজন
একটি দ্রুত এবং নোংরা উপায় (সম্ভবত পরীক্ষার জন্য) হ'ল ডিরেক্টরিটি সরিয়ে ফেলতে ওএস কল আহ্বান করার জন্য সরাসরি পদ্ধতি exec
বা spawn
পদ্ধতিটি ব্যবহার করা যেতে পারে । নোডজেস চাইল্ড_প্রসেসে আরও পড়ুন ।
let exec = require('child_process').exec
exec('rm -Rf /tmp/*.zip', callback)
ডাউনসাইডগুলি হ'ল:
উপকারিতা:
-f
পতাকাটি নিরাপদে থাকার জন্য সরিয়ে ফেলতে পারে, বা টাইপ করার সময় নিশ্চিত করে ফেলতে পারে যে সে সব কিছু মুছে ফেলছে না। exec + rm
নোডে একটি বৈধ এবং দরকারী কমান্ড যা আমি পরীক্ষার সময় প্রায়শই ব্যবহার করি।
আমি ইচ্ছা করি এত অল্প ও সাধারণ কোনও জিনিসের জন্য অতিরিক্ত মডিউল ছাড়াই এটি করার কোনও উপায় ছিল, তবে এটিই আমার পক্ষে সেরা।
আপডেট: এখন উইন্ডোজে কাজ করা উচিত (পরীক্ষিত উইন্ডোজ 10), এবং লিনাক্স / ইউনিক্স / বিএসডি / ম্যাক সিস্টেমগুলিতেও কাজ করা উচিত।
const
execSync = require("child_process").execSync,
fs = require("fs"),
os = require("os");
let removeDirCmd, theDir;
removeDirCmd = os.platform() === 'win32' ? "rmdir /s /q " : "rm -rf ";
theDir = __dirname + "/../web-ui/css/";
// WARNING: Do not specify a single file as the windows rmdir command will error.
if (fs.existsSync(theDir)) {
console.log(' removing the ' + theDir + ' directory.');
execSync(removeDirCmd + '"' + theDir + '"', function (err) {
console.log(err);
});
}
child_process.execFile
তবে শেলটি চাওয়া হবে না এমন ব্যবহার করুন এবং পরিবর্তে যুক্তিগুলি সুস্পষ্টভাবে পাস করুন।
প্রতিশ্রুতি সমাধানের জন্য এটি প্রতিশ্রুতিবদ্ধ এবং দুটি সহায়তা ফাংশন (সমস্ত এবং টু) ব্যবহার করে একটি পদ্ধতি।
এটি সমস্ত ক্রিয়াকলাপকে অ্যাসিঙ্ক্রোনাস করে।
const fs = require('fs');
const { promisify } = require('util');
const to = require('./to');
const toAll = require('./toAll');
const readDirAsync = promisify(fs.readdir);
const rmDirAsync = promisify(fs.rmdir);
const unlinkAsync = promisify(fs.unlink);
/**
* @author Aécio Levy
* @function removeDirWithFiles
* @usage: remove dir with files
* @param {String} path
*/
const removeDirWithFiles = async path => {
try {
const file = readDirAsync(path);
const [error, files] = await to(file);
if (error) {
throw new Error(error)
}
const arrayUnlink = files.map((fileName) => {
return unlinkAsync(`${path}/${fileName}`);
});
const [errorUnlink, filesUnlink] = await toAll(arrayUnlink);
if (errorUnlink) {
throw new Error(errorUnlink);
}
const deleteDir = rmDirAsync(path);
const [errorDelete, result] = await to(deleteDir);
if (errorDelete) {
throw new Error(errorDelete);
}
} catch (err) {
console.log(err)
}
};
// কোনও তৃতীয় পক্ষের lib ব্যবহার ছাড়াই
const fs = require('fs');
var FOLDER_PATH = "./dirname";
var files = fs.readdirSync(FOLDER_PATH);
files.forEach(element => {
fs.unlinkSync(FOLDER_PATH + "/" + element);
});
fs.rmdirSync(FOLDER_PATH);
fs.unllinkSync(path.join(FOLDER_PATH, element);
const fs = require("fs")
const path = require("path")
let _dirloc = '<path_do_the_directory>'
if (fs.existsSync(_dirloc)) {
fs.readdir(path, (err, files) => {
if (!err) {
for (let file of files) {
// Delete each file
fs.unlinkSync(path.join(_dirloc, file))
}
}
})
// After the 'done' of each file delete,
// Delete the directory itself.
if (fs.unlinkSync(_dirloc)) {
console.log('Directory has been deleted!')
}
}
fs.readdir(dirPath)
কোনও ফোল্ডারে পাথের অ্যারের জন্য,fs.unlink(filename)
প্রতিটি ফাইল মোছার জন্য পুনরাবৃত্তি করুন এবং অবশেষেfs.rmdir(dirPath)
এখন-খালি ফোল্ডারটি মোছার জন্য। আপনার যদি পুনরাবৃত্তি দরকার হয় তবে চেক করুনfs.lstat(filename).isDirectory()
।