[READ-ONLY] Mirror of https://github.com/probablykasper/my-bash-scripts. My personal bash scripts
cli
0

Configure Feed

Select the types of activity you want to include in your feed.

Create folder-file-extrator.mjs

Kasper (Nov 22, 2022, 7:05 PM +0100) fa033c83 8e5184f5

+83
+83
scripts/folder-file-extrator.mjs
··· 1 + import fs from 'fs' 2 + import path from 'path' 3 + import readline from 'readline/promises' 4 + import { fileURLToPath } from 'url' 5 + const jsFilePath = fileURLToPath(import.meta.url) 6 + 7 + let argv = process.argv 8 + if (argv[0].endsWith('/node')) argv = argv.slice(1) 9 + if (argv[0] === jsFilePath) argv = argv.slice(1) 10 + 11 + if (argv.length < 2) { 12 + console.log(`\nUsage: node ${path.basename(jsFilePath)} <fromFolder> <toFolder>\n`) 13 + process.exit() 14 + } 15 + 16 + async function confirmToContinue() { 17 + const rl = readline.createInterface({ 18 + input: process.stdin, 19 + output: process.stdout 20 + }) 21 + const answer = await rl.question('Continue? (y) ') 22 + if (answer !== 'y') { 23 + console.log('Cancelled'); 24 + process.exit() 25 + } 26 + } 27 + process.on('SIGINT', () => process.exit()) 28 + process.on('SIGTERM', () => process.exit()) 29 + 30 + const fromFolder = argv[0]; 31 + const toFolder = argv[1]; 32 + 33 + const subfolders = fs.readdirSync(fromFolder) 34 + .map(name => ({ 35 + path: path.join(fromFolder, name), 36 + match: name.match(/^([0-9]+) .*$/), 37 + })) 38 + .filter(subfolder => subfolder.match) 39 + .map(subfolder => ({ 40 + prefix: subfolder.match[1], 41 + ...subfolder 42 + })) 43 + .filter(({ prefix }) => prefix >= 135 && prefix <= 158) 44 + .map(subfolder => { 45 + const subfiles = fs.readdirSync(subfolder.path) 46 + .filter(name => name.endsWith('.wav')) 47 + .map(name => path.join(subfolder.path, name)); 48 + console.log(subfiles.join('\n')) 49 + console.log(); 50 + return { 51 + files: subfiles, 52 + ...subfolder, 53 + } 54 + }) 55 + 56 + console.log('Copy from folder: ' + fromFolder); 57 + console.log('Copy to folder: ' + fromFolder + '\n'); 58 + 59 + if (fs.existsSync(toFolder)) { 60 + console.log('toFolder already exists, quitting'); 61 + process.exit() 62 + } 63 + 64 + await confirmToContinue('Press y to continue') 65 + 66 + fs.mkdirSync(toFolder, { recursive: true }) 67 + 68 + let count = subfolders.flatMap(({ files }) => files).length 69 + let i = 0 70 + for (const subfolder of subfolders) { 71 + for (const file of subfolder.files) { 72 + const name = subfolder.prefix + ' ' + path.basename(file) 73 + process.stdout.clearLine(0) 74 + process.stdout.cursorTo(0) 75 + process.stdout.write(`${i + 1}/${count} ${name}`) 76 + await fs.promises.copyFile(file, path.join(toFolder, name)) 77 + i++ 78 + } 79 + } 80 + 81 + process.stdout.clearLine(0) 82 + process.stdout.cursorTo(0) 83 + process.exit()