diff --git "a/docs/\343\200\212\351\233\205\346\200\235\350\200\203\350\257\225\345\256\230\346\226\271\346\214\207\345\215\227\343\200\213\357\274\210\347\254\2542\347\211\210\357\274\211tree.md" "b/docs/\343\200\212\351\233\205\346\200\235\350\200\203\350\257\225\345\256\230\346\226\271\346\214\207\345\215\227\343\200\213\357\274\210\347\254\2542\347\211\210\357\274\211tree.md" index d73a340..d93d345 100644 --- "a/docs/\343\200\212\351\233\205\346\200\235\350\200\203\350\257\225\345\256\230\346\226\271\346\214\207\345\215\227\343\200\213\357\274\210\347\254\2542\347\211\210\357\274\211tree.md" +++ "b/docs/\343\200\212\351\233\205\346\200\235\350\200\203\350\257\225\345\256\230\346\226\271\346\214\207\345\215\227\343\200\213\357\274\210\347\254\2542\347\211\210\357\274\211tree.md" @@ -1,14 +1,10 @@ 《雅思考试官方指南》(第2版)/图书介绍.mp4
-《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考写作部分操作指南.mp4
-《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考操作系统简介.mp4
《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考听力部分操作指南.mp4
-《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思视频通话口语考试流程.mp4
-《雅思考试官方指南》(第2版)/写作Task 2答题实例/05 Comments on Writing Samples.pdf
-《雅思考试官方指南》(第2版)/口语练习音频/01 IELTS Speaking Sample - Part 1.mp3
+《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考写作部分操作指南.mp4
《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考阅读部分操作指南.mp4
-《雅思考试官方指南》(第2版)/口语练习音频/04 IELTS Speaking Sample - Full.mp3
-《雅思考试官方指南》(第2版)/口语练习音频/03 IELTS Speaking Sample - Part 3.mp3
《雅思考试官方指南》(第2版)/口语练习音频/02 IELTS Speaking Sample - Part 2.mp3
+《雅思考试官方指南》(第2版)/口语练习音频/03 IELTS Speaking Sample - Part 3.mp3
+《雅思考试官方指南》(第2版)/口语练习音频/04 IELTS Speaking Sample - Full.mp3
《雅思考试官方指南》(第2版)/听力练习音频/01 Letters of the Alphabet.mp3
《雅思考试官方指南》(第2版)/听力练习音频/02 Groups of Letters.mp3
《雅思考试官方指南》(第2版)/听力练习音频/03 Spelling.mp3
@@ -17,33 +13,37 @@ 《雅思考试官方指南》(第2版)/听力练习音频/06 Test Practice - Section 1.mp3
《雅思考试官方指南》(第2版)/听力练习音频/07 Matching Information.mp3
《雅思考试官方指南》(第2版)/听力练习音频/08 Multiple Choice.mp3
+《雅思考试官方指南》(第2版)/口语练习音频/01 IELTS Speaking Sample - Part 1.mp3
+《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思视频通话口语考试流程.mp4
+《雅思考试官方指南》(第2版)/《雅思手册》相关视频/雅思考试机考操作系统简介.mp4
《雅思考试官方指南》(第2版)/听力练习音频/09 Test Practice - Section 2.mp3
-《雅思考试官方指南》(第2版)/听力练习音频/12 Sentence Completion.mp3
+《雅思考试官方指南》(第2版)/听力练习音频/10 Map 1.mp3
《雅思考试官方指南》(第2版)/听力练习音频/13 Test Practice - Section 3.mp3
《雅思考试官方指南》(第2版)/听力练习音频/14 Signposts.mp3
+《雅思考试官方指南》(第2版)/听力练习音频/15 Table Completion.mp3
《雅思考试官方指南》(第2版)/听力练习音频/16 Flow Chart Completion.mp3
《雅思考试官方指南》(第2版)/听力练习音频/17 Summary Completion.mp3
+《雅思考试官方指南》(第2版)/写作Task 2答题实例/05 Comments on Writing Samples.pdf
《雅思考试官方指南》(第2版)/听力练习音频/18 Test Practice - Section 4.mp3
-《雅思考试官方指南》(第2版)/模拟试题听力录音/01 Academic Test 1.mp3
+《雅思考试官方指南》(第2版)/听力练习音频/11 Map 2.mp3
+《雅思考试官方指南》(第2版)/听力练习音频/12 Sentence Completion.mp3
《雅思考试官方指南》(第2版)/模拟试题听力录音/02 Academic Test 2.mp3
-《雅思考试官方指南》(第2版)/听力练习音频/10 Map 1.mp3
-《雅思考试官方指南》(第2版)/模拟试题听力录音/04 Academic Test 4.mp3
-《雅思考试官方指南》(第2版)/模拟试题听力录音/03 Academic Test 3.mp3
-《雅思考试官方指南》(第2版)/视频:IELTS评分标准/02 Reading Band Descriptor.mp4
-《雅思考试官方指南》(第2版)/听力练习音频/15 Table Completion.mp3
+《雅思考试官方指南》(第2版)/模拟试题听力录音/01 Academic Test 1.mp3
+《雅思考试官方指南》(第2版)/视频:IELTS评分标准/01 Listening Band Descriptor.mp4
+《雅思考试官方指南》(第2版)/视频:IELTS评分标准/03 Writing Band Descriptor 1 - Task Response.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/04 Writing Band Descriptor 2 - Coherence & Cohesion.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/05 Writing Band Descriptor 3 - Lexical Resource.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/06 Writing Band Descriptor 4 - Grammar.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/07 Speaking Band Descriptor 1 - Fluency & Coherence.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/08 Speaking Band Descriptor 2 - Lexical Resource.mp4
《雅思考试官方指南》(第2版)/视频:IELTS评分标准/09 Speaking Band Descriptor 3 - Grammar.mp4
-《雅思考试官方指南》(第2版)/视频:IELTS评分标准/10 Speaking Band Descriptor 4 - Pronunciation.mp4
+《雅思考试官方指南》(第2版)/视频:IELTS评分标准/02 Reading Band Descriptor.mp4
《雅思考试官方指南》(第2版)/视频:口语考试实况录像/01 Speaking Sample 1.mp4
《雅思考试官方指南》(第2版)/视频:口语考试实况录像/02 Speaking Sample 2.mp4
-《雅思考试官方指南》(第2版)/视频:口语考试实况录像/03 Speaking Sample 3.mp4
《雅思考试官方指南》(第2版)/视频:口语考试实况录像/04 Speaking Sample 4.mp4
+《雅思考试官方指南》(第2版)/视频:口语考试实况录像/03 Speaking Sample 3.mp4
《雅思考试官方指南》(第2版)/视频:口语考试实况录像/05 Comments on Speaking Samples.pdf
《雅思考试官方指南》(第2版)/视频:雅思写作指导/07 Video - POWER Writing.mp4
-《雅思考试官方指南》(第2版)/视频:IELTS评分标准/03 Writing Band Descriptor 1 - Task Response.mp4
-《雅思考试官方指南》(第2版)/听力练习音频/11 Map 2.mp3
-《雅思考试官方指南》(第2版)/视频:IELTS评分标准/01 Listening Band Descriptor.mp4
+《雅思考试官方指南》(第2版)/模拟试题听力录音/03 Academic Test 3.mp3
+《雅思考试官方指南》(第2版)/模拟试题听力录音/04 Academic Test 4.mp3
+《雅思考试官方指南》(第2版)/视频:IELTS评分标准/10 Speaking Band Descriptor 4 - Pronunciation.mp4
diff --git a/server.js b/server.js index fa954fb..6f523ba 100644 --- a/server.js +++ b/server.js @@ -1,4 +1,3 @@ -// import fs, {stat} from 'node:fs'; import fs from 'node:fs'; import path from 'node:path'; @@ -7,73 +6,27 @@ const rootFolder = '/Users/xgqfrms-mm/Documents/github/IELTS-Guide-2th/docs/《 try { let treeFilePath = rootFolder + `tree.md`; if (!fs.existsSync(treeFilePath)) { - fs.writeFileSync(treeFilePath, ``, err => { - // init - }); - } else { - fs.writeFileSync(treeFilePath, ``, err => { - // clear - }); + // do nothing } - // await fs.appendFile(rootFolder + `tree.md`, content); - // fs.writeFile(rootFolder + `tree.md`, content, err => { - // if (err) { - // console.error(err); - // } else { - // // file written successfully - // } - // }); + fs.writeFileSync(treeFilePath, ``, err => { + // init & clear + }); } catch (err) { console.error(err); } - -// const isFile = fileName => { -// return fs.lstatSync(fileName).isFile() || false; -// }; -// const isFolder = fileName => { -// return fs.lstatSync(fileName).isDirectory() || false; -// }; - -const results = []; - -const treeGenerator = async (results = [], folderName = rootFolder) => { - // 读取文件夹 - console.log(`🚀 folderName =`, folderName); +const treeFlatRecursiveTraversal = async (folderName = rootFolder) => { + // console.log(`🚀 folderName =`, folderName); await fs.readdirSync(folderName).map(fileName => { // console.log(`❓ fileName =`, fileName); - // path const pathName = path.join(folderName, fileName); - // stat(pathName, (err, stats) => { fs.stat(pathName, async (err, stats) => { // console.log(stats); - // Stats { - // dev: 16777220, - // mode: 16877, - // nlink: 12, - // uid: 501, - // gid: 20, - // rdev: 0, - // blksize: 4096, - // ino: 64334171, - // size: 384, - // blocks: 0, - // atimeMs: 1723572008018.5503, - // mtimeMs: 1723572008013.725, - // ctimeMs: 1723572008013.725, - // birthtimeMs: 1723570190954.7646, - // atime: 2024-08-13T18:00:08.019Z, - // mtime: 2024-08-13T18:00:08.014Z, - // ctime: 2024-08-13T18:00:08.014Z, - // birthtime: 2024-08-13T17:29:50.955Z - // } - // console.log(stats.isDirectory()); if(stats.isDirectory()) { // console.log(`🗂️ folderName =`, fileName); - await treeGenerator(results, pathName) + await treeFlatRecursiveTraversal(pathName) } else { // console.log(`📂 fileName =`, fileName) - // const relativePath = encodeURIComponent(pathName.replace(`/Users/xgqfrms-mm/Documents/github/IELTS-Guide-2th/docs/`, ``)); const relativePath = pathName.replace(`/Users/xgqfrms-mm/Documents/github/IELTS-Guide-2th/docs/`, ``); let url = `https://ielts-guide-2nd.xgqfrms.xyz/${encodeURIComponent(relativePath)}`; switch (relativePath) { @@ -89,62 +42,22 @@ const treeGenerator = async (results = [], folderName = rootFolder) => { case `《雅思考试官方指南》(第2版)/视频:口语考试实况录像/04 Speaking Sample 4.mp4`: url = `https://www.bilibili.com/video/BV1hVeueRE42/`; break; - // default: - // break; + default: + // do nothing + break; } const aLink = `${relativePath}
\n`; - // await fs.appendFile(rootFolder + `tree.md`, aLink, err => { - // + err && console.log(`err =`, err) }); - // await fs.appendFile(rootFolder + `tree.md`, pathName + `\n`, err => { - // // - // }); - results.push(pathName); } }); - // if(isFolder(fileName)) { - // console.log(`🗂️ folderName =`, fileName) - // } else { - // console.log(`📂 fileName =`, fileName) - // } - // if(isFile(fileName)) { - // console.log(`📂 fileName =`, fileName) - // } else { - // console.log(`🗂️ folderName =`, fileName) - // } - // let temp = path.join(folderPath, fileName); }); } try { - await treeGenerator(results, rootFolder); - // console.log(`results =`, results); + await treeFlatRecursiveTraversal(rootFolder); + console.log(`treeFlatRecursiveTraversal ✅`) } catch (err) { console.error(`error ❌ =`, err); } - - - - - - - -/* - -https://nodejs.org/api/fs.html#fslstatsyncpath-options - -http://man7.org/linux/man-pages/man2/lstat.2.html - -stat, fstat, lstat, fstatat (get file status) - - - -https://nodejs.org/api/fs.html#fsstatpath-options-callback - - -// __dirname - -https://stackoverflow.com/questions/46745014/alternative-for-dirname-in-node-js-when-using-es6-modules - -*/