Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ninjaneural
GitHub Repository: ninjaneural/webui
Path: blob/master/script/rename.js
3275 views
1
const glob = require("glob");
2
const path = require("path");
3
const fs = require("fs");
4
5
var options = {};
6
var basepath = `${process.argv[2]?.replace(/\\/g, '/')}/*.png`;
7
var step = process.argv[4] ?? 1;
8
var startIndex = process.argv[3] ?? 0;
9
if (step) step = parseInt(step);
10
if (startIndex === 0 || !!startIndex) startIndex = parseInt(startIndex);
11
12
(function () {
13
glob(`${basepath}`, options, function (er, files) {
14
files = natSort(files);
15
let index = startIndex + (files.length - 1) * step;
16
let reversed = files.reverse();
17
for (element of reversed) {
18
let name = path.basename(element);
19
console.log('name', name);
20
let dir = path.dirname(element);
21
newname = ('' + index).padStart(4, '0') + '.png';
22
fs.renameSync(
23
[dir, "/", name].join(""),
24
[dir, "/", newname].join("")
25
);
26
index -= step;
27
}
28
});
29
})();
30
31
// natural sort algorithm in JavaScript by Miigon.
32
// 2021-03-30
33
//
34
// GitHub: https://github.com/miigon/
35
36
function natSort(arr) {
37
return arr.map(v => { // split string into number/ascii substrings
38
let processedName = []
39
let str = v
40
for (let i = 0; i < str.length; i++) {
41
let isNum = Number.isInteger(Number(str[i]));
42
let j;
43
for (j = i + 1; j < str.length; j++) {
44
if (Number.isInteger(Number(str[j])) != isNum) {
45
break;
46
}
47
}
48
processedName.push(str.slice(i, j));
49
i = j - 1;
50
}
51
return processedName;
52
53
}).sort((a, b) => {
54
let len = Math.min(a.length, b.length);
55
for (let i = 0; i < len; i++) {
56
if (a[i] != b[i]) {
57
let isNumA = Number.isInteger(Number(a[i]));
58
let isNumB = Number.isInteger(Number(b[i]));
59
if (isNumA && isNumB) {
60
return parseInt(a[i]) - parseInt(b[i]);
61
} else if (isNumA) {
62
return -1;
63
} else if (isNumB) {
64
return 1;
65
} else {
66
return a[i] < b[i] ? -1 : 1;
67
}
68
}
69
}
70
// in case of one string being a prefix of the other
71
return a.length - b.length;
72
}).map(v => v.join(''));
73
}
74