Socket
Socket
Sign inDemoInstall

hlink

Package Overview
Dependencies
Maintainers
1
Versions
82
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hlink - npm Package Compare versions

Comparing version 0.7.1 to 0.7.2

lib/bins/defaultInclude.js

2

lib/bins/main/help.js
import chalk from "chalk";
export default "\nQQ\u53CD\u9988\u7FA4\u53F7\uFF1A".concat(chalk.cyanBright('807101297'), "\n\n\u7528\u6CD5:\n $ hlink [--Options] [sourceDir] destPath\n\n\u5B50\u547D\u4EE4:\n ").concat(chalk.gray('备份hlink目录缓存等 备份路径'), "\n $ hlink backup /path/to/back\n ").concat(chalk.gray('还原hlink目录缓存等 还原路径'), "\n $ hlink restore /path/to/restore\n ").concat(chalk.gray('移除命令查看帮助'), "\n $ hlink rm --help\n\n\u53EF\u914D\u7F6E\u9009\u9879:\n --saveMode,-s \u4FDD\u5B58\u6A21\u5F0F,\u9ED8\u8BA4\u4E3A\u6A21\u5F0F0\n ").concat(chalk.gray("saveMode=1 \u4FDD\u5B58\u4E00\u7EA7\u76EE\u5F55\n saveMode=0 \u4FDD\u5B58\u539F\u6709\u7684\u76F8\u5BF9\u6E90\u5730\u5740\u7684\u8DEF\u5F84"), "\n\n --includeExtname,-i \u5305\u542B\u7684\u6269\u5C55\u540D,\u591A\u4E2A\u7528','\u9694\u5F00\n ").concat(chalk.gray("\u5982\u679C\u4E0D\u914D\u7F6E\u8BE5\u9879,\u4F1A\u91C7\u7528\u4EE5\u4E0B\u7B56\u7565\n 1. \u914D\u7F6E\u4E86excludeExtnam,\u5219\u94FE\u63A5\u6587\u4EF6\u4E3A\u6392\u9664\u540E\u7684\u5176\u4ED6\u6587\u4EF6\n 2. \u672A\u914D\u7F6EexcludeExtname,\u5219\u94FE\u63A5\u6587\u4EF6\u4E3A\u76EE\u5F55\u4E0B\u7684\u6240\u6709\u6587\u4EF6"), "\n\n --excludeExtname,-e \u6392\u9664\u7684\u6269\u5C55\u540D,\u591A\u4E2A\u7528','\u9694\u5F00\u5982\u679C\u914D\u7F6E\u4E86").concat(chalk.cyan('includeExtname'), "\u5219\u8BE5\u914D\u7F6E\u65E0\u6548\n\n --mkdirIfSingle,-m \u662F\u5426\u4E3A\u72EC\u7ACB\u6587\u4EF6\u521B\u5EFA\u540C\u540D\u6587\u4EF6\u5939,\u9ED8\u8BA4\u4E3Atrue,\u4F1A\u521B\u5EFA\n\n --openCache,-o \u662F\u5426\u6253\u5F00\u7F13\u5B58,\u9ED8\u8BA4\u4E3Afalse, \u4E0D\u4F1A\u4F1A\u6253\u5F00\n ").concat(chalk.gray('打开后,每次硬链后会把对应文件存入缓存,就算下次删除硬链,也不会进行硬链'), "\n\n --configPath,-c \u6307\u5B9A\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84,\u8BF7\u4F7F\u7528\u7EDD\u5BF9\u8DEF\u5F84\n --generateConfig,-g \u751F\u6210config\u6587\u4EF6,\u53EF\u4EE5\u4F7F\u7528 hlink -g \u67E5\u770B\u8DEF\u5F84\n --removeConfig,-r \u5220\u9664\u914D\u7F6E\u6587\u4EF6\n\n\u4F8B\u5B50:\n ").concat(chalk.grey('# 创建 /share/download 下面文件到目标地址 /share/movie'), "\n $ hlink /share/download /share/movie\n ").concat(chalk.grey('# 生成配置文件'), "\n $ hlink -g");
export default "\nQQ\u53CD\u9988\u7FA4\u53F7\uFF1A".concat(chalk.cyanBright('807101297'), "\n\n\u7528\u6CD5:\n $ hlink [--Options] [sourceDir] destPath\n\n\u5B50\u547D\u4EE4:\n ").concat(chalk.gray('备份hlink目录缓存等 备份路径'), "\n $ hlink backup /path/to/back\n ").concat(chalk.gray('还原hlink目录缓存等 还原路径'), "\n $ hlink restore /path/to/restore\n ").concat(chalk.gray('移除命令查看帮助'), "\n $ hlink rm --help\n\n\u53EF\u914D\u7F6E\u9009\u9879:\n --saveMode,-s \u4FDD\u5B58\u6A21\u5F0F,\u9ED8\u8BA4\u4E3A\u6A21\u5F0F0\n ").concat(chalk.gray("saveMode=1 \u4FDD\u5B58\u4E00\u7EA7\u76EE\u5F55\n saveMode=0 \u4FDD\u5B58\u539F\u6709\u7684\u76F8\u5BF9\u6E90\u5730\u5740\u7684\u8DEF\u5F84"), "\n\n --includeExtname,-i \u5305\u542B\u7684\u6269\u5C55\u540D,\u591A\u4E2A\u7528','\u9694\u5F00\n ").concat(chalk.gray("\u5982\u679C\u4E0D\u914D\u7F6E\u8BE5\u9879,\u4F1A\u91C7\u7528\u4EE5\u4E0B\u7B56\u7565\n 1. \u914D\u7F6E\u4E86excludeExtname,\u5219\u94FE\u63A5\u6587\u4EF6\u4E3A\u6392\u9664\u540E\u7684\u5176\u4ED6\u6587\u4EF6\n 2. \u672A\u914D\u7F6EexcludeExtname,\u5219\u94FE\u63A5\u6587\u4EF6\u4E3A\u76EE\u5F55\u4E0B\u7684\u6240\u6709\u6587\u4EF6"), "\n\n --excludeExtname,-e \u6392\u9664\u7684\u6269\u5C55\u540D,\u591A\u4E2A\u7528','\u9694\u5F00\u5982\u679C\u914D\u7F6E\u4E86").concat(chalk.cyan('includeExtname'), "\u5219\u8BE5\u914D\u7F6E\u65E0\u6548\n\n --mkdirIfSingle,-m \u662F\u5426\u4E3A\u72EC\u7ACB\u6587\u4EF6\u521B\u5EFA\u540C\u540D\u6587\u4EF6\u5939,\u9ED8\u8BA4\u4E3Atrue,\u4F1A\u521B\u5EFA\n\n --openCache,-o \u662F\u5426\u6253\u5F00\u7F13\u5B58,\u9ED8\u8BA4\u4E3Afalse, \u4E0D\u4F1A\u4F1A\u6253\u5F00\n ").concat(chalk.gray('打开后,每次硬链后会把对应文件存入缓存,就算下次删除硬链,也不会进行硬链'), "\n\n --configPath,-c \u6307\u5B9A\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84,\u8BF7\u4F7F\u7528\u7EDD\u5BF9\u8DEF\u5F84\n --generateConfig,-g \u751F\u6210config\u6587\u4EF6,\u53EF\u4EE5\u4F7F\u7528 hlink -g \u67E5\u770B\u8DEF\u5F84\n --removeConfig,-r \u5220\u9664\u914D\u7F6E\u6587\u4EF6\n\n\u4F8B\u5B50:\n ").concat(chalk.grey('# 创建 /share/download 下面文件到目标地址 /share/movie'), "\n $ hlink /share/download /share/movie\n ").concat(chalk.grey('# 生成配置文件'), "\n $ hlink -g");

@@ -42,5 +42,3 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

import chalk from 'chalk';
import path from 'path';
import { saveCache } from '../../config/cacheHelp.js';
import { saveFileRecord } from '../../config/recordHelp.js';
import ProgressBar from '../../progress.js';

@@ -52,6 +50,6 @@ var green = '\u001b[42m \u001b[0m';

return __awaiter(this, void 0, void 0, function () {
var config, source, saveMode, dest, exts, excludeExts, openCache, mkdirIfSingle, configPath, isWhiteList, _a, waitLinkFiles, sourceMap, successCount, jumpCount, failCount, failReasons, failFiles, count, c, bar_1, i, len, start, end;
var config, source, saveMode, dest, exts, excludeExts, openCache, mkdirIfSingle, configPath, isWhiteList, waitLinkFiles, successCount, jumpCount, failCount, failReasons, failFiles, count, c, bar_1, i, len, start, end;
var _this = this;
return __generator(this, function (_b) {
switch (_b.label) {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:

@@ -61,3 +59,3 @@ log.info('开始检查配置...');

case 1:
config = _b.sent();
config = _a.sent();
source = config.source, saveMode = config.saveMode, dest = config.dest, exts = config.exts, excludeExts = config.excludeExts, openCache = config.openCache, mkdirIfSingle = config.mkdirIfSingle, configPath = config.configPath;

@@ -75,3 +73,3 @@ isWhiteList = !!exts.length;

timeLog.start();
_a = analyse({
waitLinkFiles = analyse({
source: source,

@@ -82,3 +80,3 @@ dest: dest,

openCache: openCache
}), waitLinkFiles = _a.waitLinkFiles, sourceMap = _a.sourceMap;
}).waitLinkFiles;
successCount = 0;

@@ -100,3 +98,3 @@ jumpCount = 0;

i = 0, len = waitLinkFiles.length / count;
_b.label = 2;
_a.label = 2;
case 2:

@@ -135,5 +133,5 @@ if (!(i < len)) return [3 /*break*/, 5];

case 3:
_b.sent();
_a.sent();
c += 1;
_b.label = 4;
_a.label = 4;
case 4:

@@ -145,14 +143,3 @@ i++;

endLog(successCount, failCount, jumpCount, failReasons);
log.info('正在写入硬链记录...');
// 移除失败的文件
failFiles.forEach(function (f) {
delete sourceMap[f];
});
Object.keys(sourceMap).map(function (sourceFile) {
var inode = sourceMap[sourceFile];
var destFile = path.join(getOriginalDestPath(sourceFile, source, dest, saveMode, mkdirIfSingle), path.basename(sourceFile));
saveFileRecord(sourceFile, destFile, inode);
});
log.success('硬链记录写入成功!');
_b.label = 6;
_a.label = 6;
case 6:

@@ -159,0 +146,0 @@ timeLog.end();

@@ -42,2 +42,3 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

import fs from 'fs-extra';
import defaultInclude from '../defaultInclude.js';
var resolvePath = function (p) { return (!!p ? path.resolve(p) : p); };

@@ -129,3 +130,3 @@ function checkSaveMode(saveMode) {

saveMode = options.saveMode, includeExtname = options.includeExtname, excludeExtname = options.excludeExtname, openCache = options.openCache, mkdirIfSingle = options.mkdirIfSingle;
exts = (includeExtname || configIncludeExtname || '')
exts = (includeExtname || configIncludeExtname || excludeExtname ? '' : defaultInclude)
.split(',')

@@ -132,0 +133,0 @@ .filter(Boolean)

import chalk from 'chalk';
export default "\nQQ\u53CD\u9988\u7FA4\u53F7\uFF1A".concat(chalk.cyanBright('807101297'), "\n\n\u7528\u6CD5:\n hlink prune /path/to/source1,/path/to/source2 /path/to/dest1,/path/to/dest2\n\n\u8BF4\u660E:\n \u8BE6\u7EC6\u8BF4\u660E\u89C1 https://github.com/likun7981/hlink/blob/master/docs/prune.md\n\n\u6CE8\u610F:\n \u56E0\u4E3A\u6211\u4EEC\u91C7\u7528 ").concat(chalk.cyan(',(英文逗号)'), " \u6765\u8FDB\u884C\u591A\u9879\u8F93\u5165\u3002\n \u6240\u4EE5\u4F60\u7684\u8DEF\u52B2\u4E00\u5B9A\u4E0D\u8981\u5305\u542B ").concat(chalk.cyan(',(英文逗号)'), "\u3002\n \u5426\u5219\u4F1A\u5BFC\u81F4\u672A\u77E5\u9519\u8BEF\uFF0C\u540E\u679C\u81EA\u8D1F~\n\n\u7528\u6CD5:\n ").concat(chalk.gray('# 修剪多余硬链文件'), "\n $ hlink prune sourceDir1,sourceDir2 destDir1,destDir2\n ").concat(chalk.gray('# 修剪多余硬链所在目录'), "\n $ hlink prune -p sourceDir1,sourceDir2 destDir1,destDir2\n ").concat(chalk.gray('# 修剪时无需确认,一般使用于计划任务'), "\n $ hlink prune -w sourceDir1,sourceDir2 destDir1,destDir2\n\n\u53EF\u914D\u7F6E\u9009\u9879:\n --pruneDir,-p \u662F\u5426\u5220\u9664\u786C\u94FE\u6587\u4EF6\u53CA\u6240\u5728\u76EE\u5F55\u3002\n \u5982\u679C\u7ED9\u4E86\u8FD9\u4E2A\u9009\u9879\u5219\u4F1A \u5426\u5219\u53EA\u4F1A\u5220\u9664 \u786C\u94FE\u6587\u4EF6\n\n --withoutConfirm,-w \u5220\u9664\u524D\u662F\u5426\u9700\u786E\u8BA4? \u9ED8\u8BA4\u9700\u8981\u786E\u8BA4\u3002\n \u5982\u679C\u4F60\u4F7F\u7528\u8BA1\u5212\u4EFB\u52A1\uFF0C\u5EFA\u8BAE\u8BBE\u7F6E\u4E3A\u65E0\u9700\u786E\u8BA4\n\n");
export default "\nQQ\u53CD\u9988\u7FA4\u53F7\uFF1A".concat(chalk.cyanBright('807101297'), "\n\n\u7528\u6CD5:\n hlink prune /path/to/source1,/path/to/source2 /path/to/dest1,/path/to/dest2\n\n\u8BF4\u660E:\n \u8BE6\u7EC6\u8BF4\u660E\u89C1 https://github.com/likun7981/hlink/blob/master/docs/prune.md\n\n\u6CE8\u610F:\n \u56E0\u4E3A\u6211\u4EEC\u91C7\u7528 ").concat(chalk.cyan(',(英文逗号)'), " \u6765\u8FDB\u884C\u591A\u9879\u8F93\u5165\u3002\n \u6240\u4EE5\u4F60\u7684\u8DEF\u52B2\u4E00\u5B9A\u4E0D\u8981\u5305\u542B ").concat(chalk.cyan(',(英文逗号)'), "\u3002\n \u5426\u5219\u4F1A\u5BFC\u81F4\u672A\u77E5\u9519\u8BEF\uFF0C\u540E\u679C\u81EA\u8D1F~\n\n\u7528\u6CD5:\n ").concat(chalk.gray('# 修剪多余硬链文件'), "\n $ hlink prune sourceDir1,sourceDir2 destDir1,destDir2\n ").concat(chalk.gray('# 修剪多余硬链并删除所在目录'), "\n $ hlink prune -p sourceDir1,sourceDir2 destDir1,destDir2\n ").concat(chalk.gray('# 修剪时无需确认,一般使用于计划任务'), "\n $ hlink prune -w sourceDir1,sourceDir2 destDir1,destDir2\n\n\u53EF\u914D\u7F6E\u9009\u9879:\n --pruneDir,-p \u662F\u5426\u5220\u9664\u786C\u94FE\u6587\u4EF6\u53CA\u6240\u5728\u76EE\u5F55\u3002\n \u5982\u679C\u7ED9\u4E86\u8FD9\u4E2A\u9009\u9879\u5219\u4F1A \u5426\u5219\u53EA\u4F1A\u5220\u9664 \u786C\u94FE\u6587\u4EF6\n\n --withoutConfirm,-w \u5220\u9664\u524D\u662F\u5426\u9700\u786E\u8BA4? \u9ED8\u8BA4\u9700\u8981\u786E\u8BA4\u3002\n \u5982\u679C\u4F60\u4F7F\u7528\u8BA1\u5212\u4EFB\u52A1\uFF0C\u5EFA\u8BAE\u8BBE\u7F6E\u4E3A\u65E0\u9700\u786E\u8BA4\n --includeExtname,i \u68C0\u6D4B\u5305\u542B\u7684\u540E\u7F00\u540D\uFF0C\u540Chlink --help\u4E2D\u7684includeExtname\u4E00\u6837\n --excludeExtname,e \u68C0\u6D4B\u6392\u9664\u7684\u540E\u7F00\u540D\uFF0C\u540Chlink --help\u4E2D\u7684excludeExtname\u4E00\u6837\n");

@@ -43,10 +43,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

import helpText from './help.js';
import defaultInclude from '../defaultInclude.js';
var timeLog = createTimeLog();
function prune(sourceStr, destStr, flags) {
return __awaiter(this, void 0, void 0, function () {
var help, pruneDir, withoutConfirm, sourceArr, destArr, inodes, pathsNeedDelete, answer;
var help, pruneDir, withoutConfirm, includeExtname, excludeExtname, exts, excludeExts, isWhiteList, sourceArr, destArr, inodes, pathsNeedDelete, answer;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
help = flags.help, pruneDir = flags.pruneDir, withoutConfirm = flags.withoutConfirm;
help = flags.help, pruneDir = flags.pruneDir, withoutConfirm = flags.withoutConfirm, includeExtname = flags.includeExtname, excludeExtname = flags.excludeExtname;
if (help) {

@@ -57,2 +58,11 @@ console.log(helpText);

warning(!sourceStr || !destStr, '必须指定要检测的源目录和硬链目录集合');
exts = (includeExtname || excludeExtname ? '' : defaultInclude)
.split(',')
.filter(Boolean)
.map(function (s) { return s.toLowerCase(); });
excludeExts = (excludeExtname || '')
.split(',')
.filter(Boolean)
.map(function (s) { return s.toLowerCase(); });
isWhiteList = !!exts.length;
timeLog.start();

@@ -73,2 +83,4 @@ sourceArr = sourceStr.split(',').map(function (s) { return path.resolve(s); });

log.info('删除模式:', chalk.magenta(pruneDir ? '删除硬链所在目录' : '仅仅删除硬链文件'));
log.info('运行模式:', chalk.magenta(isWhiteList ? '白名单' : '黑名单' + '模式'));
log.info(isWhiteList ? '包含的后缀有:' : '排除的后缀有:', chalk.magenta(isWhiteList ? exts.join(',') : excludeExts.join(',')));
log.info('开始分析目录集合...');

@@ -81,2 +93,12 @@ inodes = makeOnly(sourceArr.reduce(function (result, source) {

.filter(function (item) { return !inodes.includes(item.inode); })
.filter(function (item) {
var extname = path
.extname(item.fullPath)
.replace('.', '')
.toLowerCase();
var isSupported = isWhiteList
? exts.indexOf(extname) > -1
: excludeExts.indexOf(extname) === -1;
return isSupported;
})
.map(function (item) {

@@ -124,3 +146,5 @@ return pruneDir

_a.label = 7;
case 7: return [2 /*return*/];
case 7:
timeLog.end();
return [2 /*return*/];
}

@@ -127,0 +151,0 @@ });

@@ -117,3 +117,5 @@ #!/usr/bin/env node

pruneDir: flags.pruneDir,
withoutConfirm: flags.withoutConfirm
withoutConfirm: flags.withoutConfirm,
includeExtname: flags.includeExtname,
excludeExtname: flags.excludeExtname
});

@@ -120,0 +122,0 @@ break;

{
"name": "hlink",
"version": "0.7.1",
"version": "0.7.2",
"description": "hlink",

@@ -5,0 +5,0 @@ "license": "MIT",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc