/\n/g
을 /(\r\n|\r|\n)/g
로 교체
이유 :
OS마다 다르다. 리툭스는\n
개행 정규식을 사용하고, window는\n\r
을 사용, 예전 맥에서는\r
을 사용한다.
즉 이 모두를 아우를 수 있는 정규식으로 대체했다.
/\n/g
을/(\r\n|\r|\n)/g
로 교체index.html
과 실제src/html/~.html
을 비교하여src/html/~.html
엔 있지만index.html
에 기재되어있지 않은 파일은 파일명 앞에999999_
가 붙게하였습니다.- 기존
index.html
에 기록되어있던리스트의 순서
와묶여있는 항목
이 같도록 했습니다. - 기존 파일명에 923_filename.html 또는 42_filename.html 또는 6_filename.html 으로 되어있는 경우는 앞에
숫자와 언더바를 지운 후
파일명이 순서대로 바뀌도록 했습니다. index.html
엔 기재되어있지만src/html/~.html
엔 존재하지 않는 파일은 notExit.txt 파일에 기록하여 내보냅니다.'use strict'; // node file system module and path module const fs = require('fs'), path = require('path'); const indexList = fs.readFileSync('./index.html', 'utf8'); const realFile = fs.readdirSync('./src/html/'); let realHtmlFile = []; const compare = indexList.match(/[src]*\/*html\/(.*?)\.html/g); let compareBaseName = []; const arr = indexList.replace(/(\r\n|\r|\n)/g, '').match(/<ul>(.*?)<\/ul>/g); let arr2 = []; let obj = {}; let notExit = {}; // 실제 존재하는데 index.html 상에 기록되지 않은 파일을 위한 식 // 실제 존재하는 html 파일 realFile.map(file => path.join('./src/html/', file)) .filter(file => fs.statSync(file).isFile()) .forEach(file => { const extname = path.extname(file); const basename = path.basename(file); if (extname === '.html') { realHtmlFile.push(String(basename)); } }) // index.html 리스트 상에서만 존재하는 html 파일 for (let k=0; k<compare.length; k++) { compareBaseName.push(path.basename(compare[k])); } // 실제 존재하는 HTML 파일과 index.html 상에 기록되어있는 html 파일 비교 for (let o=0; o<realHtmlFile.length; o++) { if(!compareBaseName.some(x => x === realHtmlFile[o])) { let oldPath = path.join('./src/html', realHtmlFile[o]); let newPath = path.join('./src/html', '99_' + realHtmlFile[o]); obj[oldPath] = newPath; } } // index.html에 기재되어있는 파일들 이름 바꾸기 arr.forEach(cont => arr2.push(cont.match(/[src]*\/*html\/(.*?)\.html/g))); let arr2Compare = []; for (let p=0; p<arr2.length; p++) { for (let v=0; v<arr2[p].length; v++) { if (!arr2Compare[p]) arr2Compare[p] = []; arr2Compare[p].push(arr2[p][v].replace(/[src]*\/*[html]*\//, '')) } } for (let i=0; i<arr2.length; i++) { let n = i < 10? '0'+i : i; let m = 0; for (let j=0; j<arr2[i].length; j++) { m = j < 10? '0' + j : j; if(!realHtmlFile.some(x => x === arr2Compare[i][j])) { let oldPath = path.join('./src/html', 'notExit.txt'); let newPath = path.join('./src/html', arr2Compare[i][j]); if (!Array.isArray(notExit[oldPath])) notExit[oldPath] = []; notExit[oldPath].push(newPath); } else { let b = path.basename(arr2[i][j]); let bkey = path.join('./src/html', b); let s = n + '_' + m + '_' + b.replace(/[0-9]{1,}_/g, ''); obj[bkey] = path.join('./src/html/', s); } } } for (const property in obj) { fs.rename(property, obj[property], (err) => { if (err) throw err; console.log('Rename complete!'); }) } for (const property in notExit) { fs.writeFile(property, notExit[property], (err) => { if (err) throw err; console.log('The file has been saved!'); }); }
{ "name": "filenamechange", "version": "1.0.0", "description": "", "main": "fileNameChange.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }