node文件批量重命名

在一個實際需求中乒裆,需要對一批文件(如:文本璃俗、圖片)進行重命名奴璃,按照數(shù)字編號。正好借此熟悉了一下node的fs文件操作城豁,寫了一個批量修改文件名的腳本苟穆。



原文鏈接

需求

現(xiàn)有以下圖片文件


修改前

需要批量修改文件名稱,變?yōu)榻y(tǒng)一前綴名稱并且自增索引唱星,修改后效果

修改后

最簡單的人力操作就是逐個文件重命名雳旅,但本著DRY(Don't repeat yourself)原則,還是寫一個node腳本搞定间聊。

研究

node中要進行文件操作需要了解一下fs模塊
在fs模塊中有同步和異步兩種方式

讀取文件

//異步
fs.readFile('test.txt', 'utf-8' (err, data) => {
    if (err) {
        throw err;
    }
    console.log(data);
});

//同步
let data = fs.readFileSync('test.txt');
console.log(data);

異步讀取文件參數(shù):文件路徑岭辣,編碼方式,回調函數(shù)

寫入文件

fs.writeFile('test2.txt', 'this is text', { 'flag': 'w' }, err => {
    if (err) {
        throw err;
    }
    console.log('saved');
});

寫入文件參數(shù):目標文件甸饱,寫入內容,寫入形式,回調函數(shù)
flag寫入方式:

  • r:讀取文件
  • w:寫文件
  • a:追加

創(chuàng)建目錄

fs.mkdir('dir', (err) => {
    if (err) {
        throw err;
    }
    console.log('make dir success');
});

dir為新建目錄名稱

讀取目錄

fs.readdir('dir',(err, files) => {
    if (err) {
        throw err;
    }
    console.log(files);
}); 

dir為讀取目錄名稱叹话,files為目錄下的文件或目錄名稱數(shù)組

獲取文件信息

fs.stat('test.txt', (err, stats)=> {
    console.log(stats.isFile());         //true
})

獲取文件信息后stats方法:

方法 說明
stats.isFile() 是否為文件
stats.isDirectory() 是否為目錄
stats.isBlockDevice() 是否為塊設備
stats.isCharacterDevice() 是否為字符設備
stats.isSymbolicLink() 是否為軟鏈接
stats.isFIFO() 是否為UNIX FIFO命令管道
stats.isSocket() 是否為Socket

創(chuàng)建讀取流

let stream = fs.createReadStream('test.txt');

創(chuàng)建寫入流

let stream = fs.createWriteStreamr('test_copy.txt');

開發(fā)

開發(fā)思路:

  • 讀取源目錄
  • 判讀存放目錄是否存在偷遗,不存在時新建目錄
  • 復制文件
  • 判斷復制內容是否為文件
  • 創(chuàng)建讀取流
  • 創(chuàng)建寫入流
  • 鏈接管道,寫入文件內容

let fs = require('fs'),
    src = 'src',
    dist = 'dist',
    args = process.argv.slice(2),
    filename = 'image',
    index = 0;

//show help
if (args.length === 0 || args[0].match('--help')) {
    console.log('--help\n \t-src 文件源\n \t-dist 文件目標\n \t-n 文件名\n \t-i 文件名索引\n');
    return false;
}

args.forEach((item, i) => {
    if (item.match('-src')) {
        src = args[i + 1];
    } else if (item.match('-dist')) {
        dist = args[i + 1];
    } else if (item.match('-n')) {
        filename = args[i + 1];
    } else if (item.match('-i')) {
        index = args[i + 1];
    }
});

fs.readdir(src, (err, files) => {
    if (err) {
        console.log(err);
    } else {
        fs.exists(dist, exist => {
            if (exist) {
                copyFile(files, src, dist, filename, index);
            } else {
                fs.mkdir(dist, () => {
                    copyFile(files, src, dist, filename, index);
                })
            }
        });
    }
});

function copyFile(files, src, dist, filename, index) {
    files.forEach(n => {
        let readStream,
            writeStream,
            arr = n.split('.'),
            oldPath = src + '/' + n,
            newPath = dist + '/' + filename + index + '.' + arr[arr.length - 1];
        fs.stat(oldPath, (err, stats) => {
            if (err) {
                console.log(err);
            } else if (stats.isFile()) {
                readStream = fs.createReadStream(oldPath);
                writeStream = fs.createWriteStream(newPath);
                readStream.pipe(writeStream);
            }
        });
        index++;
    })
}

效果

總結

node提供了很多模塊可以幫助我們完成不同需求的功能開發(fā)驼壶,使javascript不僅僅局限與瀏覽器中氏豌,嘗試自己編寫一些腳本有助于對這些模塊的理解,同時也能提高辦公效率热凹。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末泵喘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子般妙,更是在濱河造成了極大的恐慌纪铺,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碟渺,死亡現(xiàn)場離奇詭異鲜锚,居然都是意外死亡,警方通過查閱死者的電腦和手機苫拍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門芜繁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绒极,你說我怎么就攤上這事骏令。” “怎么了垄提?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵榔袋,是天一觀的道長。 經常有香客問我塔淤,道長摘昌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任高蜂,我火速辦了婚禮聪黎,結果婚禮上,老公的妹妹穿的比我還像新娘备恤。我一直安慰自己稿饰,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布露泊。 她就那樣靜靜地躺著喉镰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惭笑。 梳的紋絲不亂的頭發(fā)上侣姆,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天生真,我揣著相機與錄音,去河邊找鬼捺宗。 笑死柱蟀,一個胖子當著我的面吹牛,可吹牛的內容都是我干的蚜厉。 我是一名探鬼主播长已,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼昼牛!你這毒婦竟也來了术瓮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贰健,失蹤者是張志新(化名)和其女友劉穎胞四,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霎烙,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡撬讽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了悬垃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片游昼。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖尝蠕,靈堂內的尸體忽然破棺而出烘豌,到底是詐尸還是另有隱情,我是刑警寧澤看彼,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布廊佩,位于F島的核電站,受9級特大地震影響靖榕,放射性物質發(fā)生泄漏标锄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一茁计、第九天 我趴在偏房一處隱蔽的房頂上張望料皇。 院中可真熱鬧,春花似錦星压、人聲如沸践剂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逊脯。三九已至,卻和暖如春竣贪,著一層夾襖步出監(jiān)牢的瞬間军洼,已是汗流浹背巩螃。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留匕争,地道東北人牺六。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像汗捡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子畏纲,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容

  • Node.js是目前非成茸。火熱的技術,但是它的誕生經歷卻很奇特盗胀。 眾所周知艘蹋,在Netscape設計出JavaScri...
    w_zhuan閱讀 3,616評論 2 41
  • 模塊化公布自己的模塊功能. 其他模塊調用另外的模塊. 公布方法 如果要輸出一個鍵值對象{},可以利用exports...
    httIsHere閱讀 522評論 0 0
  • 個人入門學習用筆記票灰、不過多作為參考依據(jù)女阀。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點、復制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,472評論 1 37
  • Node.js是目前非承加兀火熱的技術浸策,但是它的誕生經歷卻很奇特。 眾所周知惹盼,在Netscape設計出JavaScri...
    Myselfyan閱讀 4,072評論 2 58
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理庸汗,服務發(fā)現(xiàn),斷路器手报,智...
    卡卡羅2017閱讀 134,660評論 18 139