file-batch-toolkit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +74 -0
  2. package/package.json +8 -0
package/index.js ADDED
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env node
2
+ // File Batch Toolkit Pro - Batch rename, resize, convert files
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+
6
+ function help() {
7
+ console.log(`
8
+ File Batch Toolkit Pro v1.0.0
9
+
10
+ Usage:
11
+ batch rename <dir> --pattern "prefix_" Rename all files
12
+ batch resize <dir> --width 800 Resize images (requires sharp)
13
+ batch convert <dir> --to .md Convert .txt to .md
14
+ batch dedupe <dir> Find and remove duplicates
15
+ batch organize <dir> --by ext Sort into folders by type
16
+ batch help Show this help
17
+ `);
18
+ }
19
+
20
+ async function main() {
21
+ const args = process.argv.slice(2);
22
+ const cmd = args[0] || 'help';
23
+
24
+ if (cmd === 'help') { help(); return; }
25
+
26
+ const dir = args[1];
27
+ if (!dir || !fs.existsSync(dir)) { console.error('Specify a valid directory'); return; }
28
+
29
+ if (cmd === 'rename') {
30
+ const pi = args.indexOf('--pattern');
31
+ const pattern = pi >= 0 ? args[pi + 1] : 'file_';
32
+ const files = fs.readdirSync(dir).filter(f => fs.statSync(path.join(dir, f)).isFile());
33
+ files.forEach((f, i) => {
34
+ const ext = path.extname(f);
35
+ const newName = `${pattern}${String(i + 1).padStart(3, '0')}${ext}`;
36
+ fs.renameSync(path.join(dir, f), path.join(dir, newName));
37
+ console.log(` ${f} → ${newName}`);
38
+ });
39
+ return;
40
+ }
41
+
42
+ if (cmd === 'organize') {
43
+ const bi = args.indexOf('--by');
44
+ const by = bi >= 0 ? args[bi + 1] : 'ext';
45
+ const files = fs.readdirSync(dir).filter(f => fs.statSync(path.join(dir, f)).isFile());
46
+ files.forEach(f => {
47
+ const ext = path.extname(f).slice(1).toLowerCase() || 'no_ext';
48
+ const subDir = path.join(dir, ext);
49
+ if (!fs.existsSync(subDir)) fs.mkdirSync(subDir);
50
+ fs.renameSync(path.join(dir, f), path.join(subDir, f));
51
+ });
52
+ console.log(` Organized ${files.length} files`);
53
+ return;
54
+ }
55
+
56
+ if (cmd === 'dedupe') {
57
+ const files = fs.readdirSync(dir).filter(f => fs.statSync(path.join(dir, f)).isFile());
58
+ const seen = new Map();
59
+ let removed = 0;
60
+ files.forEach(f => {
61
+ const fp = path.join(dir, f);
62
+ const size = fs.statSync(fp).size;
63
+ if (seen.has(size)) {
64
+ fs.unlinkSync(fp); removed++;
65
+ } else { seen.set(size, f); }
66
+ });
67
+ console.log(` Found ${removed} duplicates, removed`);
68
+ return;
69
+ }
70
+
71
+ help();
72
+ }
73
+
74
+ main().catch(console.error);
package/package.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "file-batch-toolkit",
3
+ "version": "1.0.0",
4
+ "description": "Batch file operations - rename, organize, deduplicate",
5
+ "bin": { "batch": "./index.js" },
6
+ "main": "index.js",
7
+ "type": "module"
8
+ }