Dùng NodeJs xóa file hàng loạt

Đôi khi ta có nhu cầu xóa hàng loạt 1 số files (Bulk delete). Với NodeJs ta có thể viết nhanh đoạn script xóa file dễ hiểu.

var fs = require("fs");
var arr = ['IMG_1.png','IMG_2.png','IMG_3.png']; //danh sách tên các file sẽ xóa
var curDir = 'E:/myfolder'; //Đường dẫn folder chứa các file muốn xóa
var files=fs.readdirSync(curDir);
var count = 0;
for(var i = 0;i<files.length;i++)
{
    var file = files[i];
    for(var j= 0;j<arr.length;j++)
    {
        if(file == arr[j]){
            count++;
            console.log('Deleting ' + file);
            fs.unlinkSync('curDir' + '/' + file);
            break;
        }
    }
}
console.log('Done! Deleted ' + count + ' files');

Trên đây là đoạn script xóa file theo danh sách tên file. Ta cũng có thể xóa các file với điều kiện khác, ví dụ như xóa các file bắt đầu bằng 1 chuỗi kí tự

var fs = require("fs");
var arr = ['IMG','MOV']; //danh sách các chuỗi kí tự. Các file bị xóa sẽ có dạng: IMG_1123.png, IMG_3243.png, MOV_2343_1.mp4, ...
var curDir = 'E:/myfolder'; //Đường dẫn folder chứa các file muốn xóa
var files=fs.readdirSync(curDir);
var count = 0;
for(var i = 0;i<files.length;i++)
{
    var file = files[i];
    for(var j= 0;j<arr.length;j++)
    {
        if(file.startsWith(arr[j])){
            count++;
            console.log('Deleting ' + file);
            fs.unlinkSync('curDir' + '/' + file);
            break;
        }
    }
}
console.log('Done! Deleted ' + count + ' files');

Đối với yêu cầu duyệt đệ quy và xóa thì ta sẽ làm thế này. Ví dụ sau dùng để duyệt qua E:/myfolder và xóa đi các file nếu có pattern -{digit}x{digit}. Ví dụ: khang-100×100.png

var fs = require("fs");
var curDir = 'E:/myfolder'; 
var path = require('path');
var walk = function(dir, done) {
  var results = [];
  fs.readdir(dir, function(err, list) {
    if (err) return done(err);
    var pending = list.length;
    if (!pending) return done(null, results);
    list.forEach(function(file) {
      file = path.resolve(dir, file);
      fs.stat(file, function(err, stat) {
        if (stat && stat.isDirectory()) {
          walk(file, function(err, res) {
            results = results.concat(res);
            if (!--pending) done(null, results);
          });
        } else {
          results.push(file);
          if (!--pending) done(null, results);
        }
      });
    });
  });
};
var patt = /-\d+x\d+/i
walk(curDir, function(err, files) {
  if (err) throw err;
  console.log(files);
  var count = 0;
  for(var i = 0;i<files.length;i++)
	{
	    var file = files[i];
	    for(var j= 0;j= 0) {
	            count++;
	            console.log('Deleting ' + file);
	            fs.unlinkSync(file);
	            break;
	        }
	    }
	}
	console.log('Deleted ' + count);
});

Copy file hàng loạt:

var fs = require("fs");
var curDir = 'D:/image'; 
var path = require('path');
var walk = function(dir, done) {
  var results = [];
  fs.readdir(dir, function(err, list) {
    if (err) return done(err);
    var pending = list.length;
    if (!pending) return done(null, results);
    list.forEach(function(file) {
      file = path.resolve(dir, file);
      fs.stat(file, function(err, stat) {
        if (stat && stat.isDirectory()) {
          walk(file, function(err, res) {
            results = results.concat(res);
            if (!--pending) done(null, results);
          });
        } else {
          results.push(file);
          if (!--pending) done(null, results);
        }
      });
    });
  });
};
var pipeCopying = function(files, i){
	var file = files[i];
    //count++;
    if (typeof file !== 'undefined'){
		console.log('Copying ' + file);
	    var newFile = 'D:/image2/' + path.basename(file);
		var stream = fs.createReadStream(file).pipe(fs.createWriteStream(newFile));
		stream.on('finish', () => {
			if (i < files.length){
				pipeCopying(files, i + 1);
			}
		});
    }
    
};

var patt = /-\d+x\d+/i
walk(curDir, function(err, files) {
  if (err) throw err;
  if (files.length > 0)
  	pipeCopying(files, 0);
});

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s