@fredlackey/devutils 0.0.1 → 0.0.3
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.
- package/README.md +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
- package/src/utils/windows/choco.js +82 -26
- package/src/utils/windows/winget.js +89 -27
|
@@ -1,24 +1,380 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* delete-files - Delete files matching a pattern from the current directory
|
|
5
|
+
*
|
|
6
|
+
* Migrated from legacy dotfiles alias.
|
|
7
|
+
* Original:
|
|
8
|
+
* delete-files() {
|
|
9
|
+
* local q="${1:-*.DS_Store}"
|
|
10
|
+
* find . -type f -name "$q" -ls -delete
|
|
11
|
+
* }
|
|
12
|
+
*
|
|
13
|
+
* This script recursively searches the current directory for files matching
|
|
14
|
+
* the specified glob pattern and deletes them. By default, it removes .DS_Store
|
|
15
|
+
* files, which are macOS metadata files that often clutter repositories.
|
|
16
|
+
*
|
|
17
|
+
* Usage:
|
|
18
|
+
* delete-files # Delete all .DS_Store files (default)
|
|
19
|
+
* delete-files "*.log" # Delete all .log files
|
|
20
|
+
* delete-files "*.tmp" # Delete all .tmp files
|
|
21
|
+
* delete-files ".thumbs.db" # Delete specific filename
|
|
22
|
+
*
|
|
5
23
|
* @module scripts/delete-files
|
|
6
24
|
*/
|
|
7
25
|
|
|
26
|
+
const os = require('../utils/common/os');
|
|
27
|
+
const fs = require('fs');
|
|
28
|
+
const path = require('path');
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Converts a simple glob pattern to a regular expression.
|
|
32
|
+
*
|
|
33
|
+
* This handles basic glob patterns commonly used in file matching:
|
|
34
|
+
* - * matches any characters (except path separators)
|
|
35
|
+
* - ? matches a single character
|
|
36
|
+
* - Other special regex characters are escaped
|
|
37
|
+
*
|
|
38
|
+
* @param {string} pattern - The glob pattern (e.g., "*.log", "test?.txt")
|
|
39
|
+
* @returns {RegExp} A regular expression that matches the pattern
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* const regex = globToRegex("*.log");
|
|
43
|
+
* regex.test("debug.log"); // true
|
|
44
|
+
* regex.test("file.txt"); // false
|
|
45
|
+
*/
|
|
46
|
+
function globToRegex(pattern) {
|
|
47
|
+
// Escape special regex characters, then convert glob wildcards to regex
|
|
48
|
+
const escaped = pattern
|
|
49
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&') // Escape regex special chars
|
|
50
|
+
.replace(/\*/g, '.*') // * becomes .*
|
|
51
|
+
.replace(/\?/g, '.'); // ? becomes .
|
|
52
|
+
return new RegExp(`^${escaped}$`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Recursively finds all files in a directory that match a given pattern.
|
|
57
|
+
*
|
|
58
|
+
* This function walks the directory tree starting from the given directory
|
|
59
|
+
* and collects all files whose names match the specified glob pattern.
|
|
60
|
+
* It handles errors gracefully (e.g., permission denied) and continues
|
|
61
|
+
* processing other directories.
|
|
62
|
+
*
|
|
63
|
+
* @param {string} dir - The directory to search in (absolute path)
|
|
64
|
+
* @param {RegExp} pattern - The regex pattern to match filenames against
|
|
65
|
+
* @returns {string[]} Array of absolute paths to matching files
|
|
66
|
+
*/
|
|
67
|
+
function findMatchingFiles(dir, pattern) {
|
|
68
|
+
const matches = [];
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Inner recursive function that walks the directory tree.
|
|
72
|
+
* @param {string} currentDir - The current directory being processed
|
|
73
|
+
*/
|
|
74
|
+
function walkDir(currentDir) {
|
|
75
|
+
let entries;
|
|
76
|
+
|
|
77
|
+
try {
|
|
78
|
+
// Read directory contents with file type information
|
|
79
|
+
// withFileTypes is more efficient than calling stat() for each entry
|
|
80
|
+
entries = fs.readdirSync(currentDir, { withFileTypes: true });
|
|
81
|
+
} catch (error) {
|
|
82
|
+
// Handle permission errors or other read failures gracefully
|
|
83
|
+
// Common reasons: permission denied, directory deleted during scan
|
|
84
|
+
if (error.code !== 'ENOENT' && error.code !== 'EACCES') {
|
|
85
|
+
console.error(`Warning: Could not read directory ${currentDir}: ${error.message}`);
|
|
86
|
+
}
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
for (const entry of entries) {
|
|
91
|
+
const fullPath = path.join(currentDir, entry.name);
|
|
92
|
+
|
|
93
|
+
if (entry.isDirectory()) {
|
|
94
|
+
// Recursively search subdirectories
|
|
95
|
+
// Skip common directories that should not be searched
|
|
96
|
+
// (e.g., node_modules, .git) to improve performance
|
|
97
|
+
if (entry.name !== 'node_modules' && entry.name !== '.git') {
|
|
98
|
+
walkDir(fullPath);
|
|
99
|
+
}
|
|
100
|
+
} else if (entry.isFile()) {
|
|
101
|
+
// Check if the filename matches the pattern
|
|
102
|
+
if (pattern.test(entry.name)) {
|
|
103
|
+
matches.push(fullPath);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Note: Symlinks, sockets, and other special files are ignored
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
walkDir(dir);
|
|
111
|
+
return matches;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Formats file size for human-readable output.
|
|
116
|
+
*
|
|
117
|
+
* Converts bytes to a human-readable string with appropriate units
|
|
118
|
+
* (B, KB, MB, GB). This mimics the size display from `ls -l`.
|
|
119
|
+
*
|
|
120
|
+
* @param {number} bytes - The size in bytes
|
|
121
|
+
* @returns {string} Human-readable size string
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* formatSize(1024); // "1.0 KB"
|
|
125
|
+
* formatSize(1048576); // "1.0 MB"
|
|
126
|
+
*/
|
|
127
|
+
function formatSize(bytes) {
|
|
128
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
129
|
+
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
130
|
+
if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
131
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;
|
|
132
|
+
}
|
|
133
|
+
|
|
8
134
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
135
|
+
* Pure Node.js implementation that works on any platform.
|
|
136
|
+
*
|
|
137
|
+
* This function uses only Node.js built-in modules (fs, path) to:
|
|
138
|
+
* 1. Parse the glob pattern from arguments
|
|
139
|
+
* 2. Recursively find matching files
|
|
140
|
+
* 3. Display what will be deleted (like find -ls)
|
|
141
|
+
* 4. Delete each matching file
|
|
142
|
+
*
|
|
143
|
+
* This approach is preferred over shelling out to `find` because:
|
|
144
|
+
* - It works identically on all platforms (macOS, Linux, Windows)
|
|
145
|
+
* - Node.js fs operations are fast and reliable
|
|
146
|
+
* - We avoid shell escaping and quoting issues with special characters
|
|
147
|
+
* - Better error handling and reporting
|
|
11
148
|
*
|
|
12
149
|
* @param {string[]} args - Command line arguments
|
|
13
150
|
* @param {string} [args.0] - Glob pattern to match (defaults to "*.DS_Store")
|
|
14
151
|
* @returns {Promise<void>}
|
|
15
152
|
*/
|
|
16
|
-
async function
|
|
17
|
-
//
|
|
153
|
+
async function do_delete_files_nodejs(args) {
|
|
154
|
+
// Get the pattern from arguments, default to *.DS_Store (the original behavior)
|
|
155
|
+
// The original bash function used: local q="${1:-*.DS_Store}"
|
|
156
|
+
const pattern = args[0] || '*.DS_Store';
|
|
157
|
+
|
|
158
|
+
// Start from the current working directory (like the original: find .)
|
|
159
|
+
const startDir = process.cwd();
|
|
160
|
+
|
|
161
|
+
// Convert the glob pattern to a regular expression for matching
|
|
162
|
+
const regex = globToRegex(pattern);
|
|
163
|
+
|
|
164
|
+
console.log(`Searching for files matching "${pattern}" in ${startDir}...`);
|
|
165
|
+
console.log('');
|
|
166
|
+
|
|
167
|
+
// Find all files matching the pattern
|
|
168
|
+
const matchingFiles = findMatchingFiles(startDir, regex);
|
|
169
|
+
|
|
170
|
+
// Check if any files were found
|
|
171
|
+
if (matchingFiles.length === 0) {
|
|
172
|
+
console.log(`No files matching "${pattern}" found.`);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
console.log(`Found ${matchingFiles.length} file(s) to delete:`);
|
|
177
|
+
console.log('');
|
|
178
|
+
|
|
179
|
+
// Track statistics
|
|
180
|
+
let deletedCount = 0;
|
|
181
|
+
let failedCount = 0;
|
|
182
|
+
let totalBytes = 0;
|
|
183
|
+
|
|
184
|
+
// Process each matching file
|
|
185
|
+
for (const filePath of matchingFiles) {
|
|
186
|
+
try {
|
|
187
|
+
// Get file stats for display (like find -ls shows file details)
|
|
188
|
+
const stats = fs.statSync(filePath);
|
|
189
|
+
const size = formatSize(stats.size);
|
|
190
|
+
totalBytes += stats.size;
|
|
191
|
+
|
|
192
|
+
// Display the file being deleted (mimics find -ls output)
|
|
193
|
+
// Show relative path for cleaner output
|
|
194
|
+
const relativePath = path.relative(startDir, filePath);
|
|
195
|
+
console.log(` ${size.padStart(10)} ${relativePath}`);
|
|
196
|
+
|
|
197
|
+
// Delete the file
|
|
198
|
+
fs.unlinkSync(filePath);
|
|
199
|
+
deletedCount++;
|
|
200
|
+
} catch (error) {
|
|
201
|
+
// Handle deletion failures (permission denied, file locked, etc.)
|
|
202
|
+
const relativePath = path.relative(startDir, filePath);
|
|
203
|
+
console.error(` Error deleting ${relativePath}: ${error.message}`);
|
|
204
|
+
failedCount++;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Print summary
|
|
209
|
+
console.log('');
|
|
210
|
+
console.log('---');
|
|
211
|
+
console.log(`Deleted: ${deletedCount} file(s) (${formatSize(totalBytes)})`);
|
|
212
|
+
if (failedCount > 0) {
|
|
213
|
+
console.log(`Failed: ${failedCount} file(s)`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Deletes files matching a pattern on macOS.
|
|
219
|
+
*
|
|
220
|
+
* Uses the pure Node.js implementation since file operations work
|
|
221
|
+
* identically on macOS. No platform-specific code is needed.
|
|
222
|
+
*
|
|
223
|
+
* @param {string[]} args - Command line arguments
|
|
224
|
+
* @returns {Promise<void>}
|
|
225
|
+
*/
|
|
226
|
+
async function do_delete_files_macos(args) {
|
|
227
|
+
return do_delete_files_nodejs(args);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Deletes files matching a pattern on Ubuntu.
|
|
232
|
+
*
|
|
233
|
+
* Uses the pure Node.js implementation since file operations work
|
|
234
|
+
* identically on Linux. No platform-specific code is needed.
|
|
235
|
+
*
|
|
236
|
+
* @param {string[]} args - Command line arguments
|
|
237
|
+
* @returns {Promise<void>}
|
|
238
|
+
*/
|
|
239
|
+
async function do_delete_files_ubuntu(args) {
|
|
240
|
+
return do_delete_files_nodejs(args);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Deletes files matching a pattern on Raspberry Pi OS.
|
|
245
|
+
*
|
|
246
|
+
* Uses the pure Node.js implementation since file operations work
|
|
247
|
+
* identically on Linux. No platform-specific code is needed.
|
|
248
|
+
*
|
|
249
|
+
* @param {string[]} args - Command line arguments
|
|
250
|
+
* @returns {Promise<void>}
|
|
251
|
+
*/
|
|
252
|
+
async function do_delete_files_raspbian(args) {
|
|
253
|
+
return do_delete_files_nodejs(args);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Deletes files matching a pattern on Amazon Linux.
|
|
258
|
+
*
|
|
259
|
+
* Uses the pure Node.js implementation since file operations work
|
|
260
|
+
* identically on Linux. No platform-specific code is needed.
|
|
261
|
+
*
|
|
262
|
+
* @param {string[]} args - Command line arguments
|
|
263
|
+
* @returns {Promise<void>}
|
|
264
|
+
*/
|
|
265
|
+
async function do_delete_files_amazon_linux(args) {
|
|
266
|
+
return do_delete_files_nodejs(args);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Deletes files matching a pattern on Windows (Command Prompt).
|
|
271
|
+
*
|
|
272
|
+
* Uses the pure Node.js implementation since file operations work
|
|
273
|
+
* identically on Windows. No platform-specific code is needed.
|
|
274
|
+
*
|
|
275
|
+
* Note: On Windows, .DS_Store files are less common (they're macOS-specific),
|
|
276
|
+
* but users may want to clean them up after receiving files from Mac users.
|
|
277
|
+
*
|
|
278
|
+
* @param {string[]} args - Command line arguments
|
|
279
|
+
* @returns {Promise<void>}
|
|
280
|
+
*/
|
|
281
|
+
async function do_delete_files_cmd(args) {
|
|
282
|
+
return do_delete_files_nodejs(args);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Deletes files matching a pattern on Windows (PowerShell).
|
|
287
|
+
*
|
|
288
|
+
* Uses the pure Node.js implementation since file operations work
|
|
289
|
+
* identically on Windows. No platform-specific code is needed.
|
|
290
|
+
*
|
|
291
|
+
* @param {string[]} args - Command line arguments
|
|
292
|
+
* @returns {Promise<void>}
|
|
293
|
+
*/
|
|
294
|
+
async function do_delete_files_powershell(args) {
|
|
295
|
+
return do_delete_files_nodejs(args);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Deletes files matching a pattern in Git Bash on Windows.
|
|
300
|
+
*
|
|
301
|
+
* Uses the pure Node.js implementation since file operations work
|
|
302
|
+
* identically regardless of the shell being used. No platform-specific
|
|
303
|
+
* code is needed.
|
|
304
|
+
*
|
|
305
|
+
* @param {string[]} args - Command line arguments
|
|
306
|
+
* @returns {Promise<void>}
|
|
307
|
+
*/
|
|
308
|
+
async function do_delete_files_gitbash(args) {
|
|
309
|
+
return do_delete_files_nodejs(args);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Main entry point - detects environment and executes appropriate implementation.
|
|
314
|
+
*
|
|
315
|
+
* The "delete-files" command recursively finds and deletes files matching a
|
|
316
|
+
* glob pattern. This is commonly used to clean up unwanted files like:
|
|
317
|
+
* - .DS_Store (macOS metadata files)
|
|
318
|
+
* - *.log (log files)
|
|
319
|
+
* - *.tmp (temporary files)
|
|
320
|
+
* - Thumbs.db (Windows thumbnail cache)
|
|
321
|
+
*
|
|
322
|
+
* The command is idempotent - running it multiple times produces the same
|
|
323
|
+
* result (no files matching the pattern exist). If no files match, it
|
|
324
|
+
* simply reports that no files were found.
|
|
325
|
+
*
|
|
326
|
+
* @param {string[]} args - Command line arguments
|
|
327
|
+
* @param {string} [args.0] - Glob pattern (defaults to "*.DS_Store")
|
|
328
|
+
* @returns {Promise<void>}
|
|
329
|
+
*/
|
|
330
|
+
async function do_delete_files(args) {
|
|
331
|
+
const platform = os.detect();
|
|
332
|
+
|
|
333
|
+
const handlers = {
|
|
334
|
+
'macos': do_delete_files_macos,
|
|
335
|
+
'ubuntu': do_delete_files_ubuntu,
|
|
336
|
+
'debian': do_delete_files_ubuntu,
|
|
337
|
+
'raspbian': do_delete_files_raspbian,
|
|
338
|
+
'amazon_linux': do_delete_files_amazon_linux,
|
|
339
|
+
'rhel': do_delete_files_amazon_linux,
|
|
340
|
+
'fedora': do_delete_files_ubuntu,
|
|
341
|
+
'linux': do_delete_files_ubuntu,
|
|
342
|
+
'wsl': do_delete_files_ubuntu,
|
|
343
|
+
'cmd': do_delete_files_cmd,
|
|
344
|
+
'windows': do_delete_files_cmd,
|
|
345
|
+
'powershell': do_delete_files_powershell,
|
|
346
|
+
'gitbash': do_delete_files_gitbash
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
const handler = handlers[platform.type];
|
|
350
|
+
if (!handler) {
|
|
351
|
+
console.error(`Platform '${platform.type}' is not supported for this command.`);
|
|
352
|
+
console.error('');
|
|
353
|
+
console.error('Supported platforms:');
|
|
354
|
+
console.error(' - macOS');
|
|
355
|
+
console.error(' - Ubuntu, Debian, and other Linux distributions');
|
|
356
|
+
console.error(' - Raspberry Pi OS');
|
|
357
|
+
console.error(' - Amazon Linux, RHEL, Fedora');
|
|
358
|
+
console.error(' - Windows (CMD, PowerShell, Git Bash)');
|
|
359
|
+
process.exit(1);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
await handler(args);
|
|
18
363
|
}
|
|
19
364
|
|
|
20
|
-
module.exports = {
|
|
365
|
+
module.exports = {
|
|
366
|
+
main: do_delete_files,
|
|
367
|
+
do_delete_files,
|
|
368
|
+
do_delete_files_nodejs,
|
|
369
|
+
do_delete_files_macos,
|
|
370
|
+
do_delete_files_ubuntu,
|
|
371
|
+
do_delete_files_raspbian,
|
|
372
|
+
do_delete_files_amazon_linux,
|
|
373
|
+
do_delete_files_cmd,
|
|
374
|
+
do_delete_files_powershell,
|
|
375
|
+
do_delete_files_gitbash
|
|
376
|
+
};
|
|
21
377
|
|
|
22
378
|
if (require.main === module) {
|
|
23
|
-
|
|
379
|
+
do_delete_files(process.argv.slice(2));
|
|
24
380
|
}
|