123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import {execSync} from 'child_process';
- import {existsSync, readdirSync, statSync} from 'fs';
- import {join, basename, dirname, resolve, relative} from 'path';
- import url from 'url';
- // 要排除的目录列表
- const EXCLUDE_DIRS = ['.git', '.idea', 'soft', 'pyTools', 'drop_code', 'jstest', 'local', 'logs', '对话1.txt', 'vod_cache', 'data/mv'];
- // 要排除的文件列表
- const EXCLUDE_FILES = ['config/env.json', '.env', 'js/UC分享.js', 'js/百忙无果[官].js', 'json/UC分享.json', 'jx/奇奇.js', 'jx/芒果关姐.js', 'data/settings/link_data.json', 'index.json', 'custom.json'];
- // 获取脚本所在目录
- const getScriptDir = () => dirname(resolve(url.fileURLToPath(import.meta.url)));
- // 筛选带 [密] 的文件
- const filterGreenFiles = (scriptDir) => {
- const jsDir = join(scriptDir, 'js');
- const greenFiles = [];
- if (existsSync(jsDir)) {
- const stack = [jsDir];
- while (stack.length) {
- const currentDir = stack.pop();
- const items = readdirSync(currentDir);
- for (const item of items) {
- const fullPath = join(currentDir, item);
- const stats = statSync(fullPath);
- if (stats.isDirectory()) {
- stack.push(fullPath);
- } else if (/\[密[^\]]*\]/.test(item)) {
- greenFiles.push(relative(scriptDir, fullPath));
- }
- }
- }
- }
- return greenFiles;
- };
- // 压缩目录
- const compressDirectory = (scriptDir, green) => {
- const currentDir = basename(scriptDir);
- const currentTime = new Date().toLocaleDateString('zh-CN', {
- year: 'numeric',
- month: '2-digit',
- day: '2-digit'
- }).replace(/\//g, '');
- const archiveSuffix = green ? '-green' : '';
- const archiveName = `${currentDir}-${currentTime}${archiveSuffix}.7z`;
- const parentDir = resolve(scriptDir, '..');
- const archivePath = join(parentDir, archiveName);
- // 构建 7z 命令
- const excludeParams = [];
- // 排除目录
- for (const excludeDir of EXCLUDE_DIRS) {
- excludeParams.push(`-xr!${excludeDir}`);
- }
- // 排除文件
- for (const excludeFile of EXCLUDE_FILES) {
- const excludeFilePath = join(scriptDir, excludeFile);
- if (existsSync(excludeFilePath)) {
- excludeParams.push(`-xr!${excludeFile}`);
- } else {
- console.warn(`警告: ${excludeFile} 不存在!`);
- }
- }
- // 如果启用 green 筛选,排除不符合条件的文件
- if (green) {
- const greenFiles = filterGreenFiles(scriptDir);
- for (const file of greenFiles) {
- excludeParams.push(`-x!${file}`);
- }
- }
- // 构建命令,打包目录内容而不包含目录本身
- const command = `7z a "${archivePath}" "${join(scriptDir, '*')}" -r ${excludeParams.join(' ')}`;
- console.log(`构建的 7z 命令: ${command}`);
- try {
- execSync(command, {stdio: 'inherit'});
- console.log(`压缩完成: ${archivePath}`);
- } catch (error) {
- console.error(`压缩失败: ${error.message}`);
- }
- };
- // 主程序入口
- const main = () => {
- const scriptDir = getScriptDir();
- // 简单解析命令行参数
- const args = process.argv.slice(2);
- const green = args.includes('-g') || args.includes('--green');
- compressDirectory(scriptDir, green);
- };
- main();
|