利用Node.js fs模塊刪除重複文件

利用Node.js fs模塊刪除重複文件

前言

不知道是不是百度雲PC端的bug,最近使用百度雲PC端下載文件時,發現下載的文件中,幾乎每個文件都重複了一個,看着文件也挺多的,挨個刪除是不可能的(也想偷懶一下啊哈哈哈),所以就想用Node.js進行處理了。

注:以下文件截圖都是例子,真實的文件比這還要多得多。

Github

【Duplicate_Files_Handler】: https://github.com/facccccer/Duplicate_Files_Handler.git.
項目文件都上傳到Github了,覺得有幫助的可以看看。

思路

  • Node.js 知識
    • fs.existsSync():如果路徑存在,則返回 true,否則返回 false。
    • fs.stat():獲取文件信息
      • stats.isFile():判斷是否爲文件類型
    • fs.unlink():刪除文件
    • fs.appendFile():異步地將數據追加到文件,如果文件尚不存在則創建該文件。 data 可以是字符串或 Buffer。
    • fs.readdir():讀取文件目錄
  • 遞歸算法:
    由於文件都在不同的文件夾中,文件夾中又有文件夾…所以這裏採用了遞歸算法。

處理前

在這裏插入圖片描述

處理後

在這裏插入圖片描述

LOG

另外,還可以通過打開log.txt文件查看刪除記錄。
在這裏插入圖片描述

代碼

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

function deal(path, tagOfRepeatFile) {
    if (!fs.existsSync(path)) return;
    fs.stat(path, (err, stats) => {
        if (err) throw err;
        if (stats.isFile()) {
            if (path.indexOf(tagOfRepeatFile) != -1) {
                fs.unlink(path, err => {
                    var msg = '< Delete file successful! >';
                    if (err) {
                        msg = '< Delete file failed! >';
                        throw err;
                    }
                    fs.appendFile(__dirname + '/log.txt', msg + '\n  [path] ' + path + '\n  [fileName] ' + path.substring(path.lastIndexOf('/') + 1) + '\n\n', err => {
                        if (err) throw err;
                    });
                })
            }
        } else {
            fs.readdir(path, (err, fileNames) => {
                if (err) throw err;
                console.log(fileNames);
                fileNames.forEach(fileName => {
                    deal(filePath = path + '/' + fileName, tagOfRepeatFile);
                })
            });
        }
    })
}

var directory = path.join(__dirname, '/test_after');
deal(directory, '(1)');

總結

問題、解決問題的思路、效果截圖和代碼也都上了,相當於做一個筆記吧,總之,程序很有用處啊哈哈哈。
Github: https://github.com/facccccer/Duplicate_Files_Handler.git.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章