Skip to content

Commit ce5cb5b

Browse files
committed
add replace func to fixname cmd
1 parent 1a13e5c commit ce5cb5b

14 files changed

+106
-30
lines changed

cmd/cmd_compress.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ const handler = async function cmdCompress(argv) {
102102
const purgeSource = argv.purge || false;
103103
log.show(`${logTag} input:`, root);
104104

105-
const RE_THUMB = /Z4K|M4K|feature|web|thumb$/i;
105+
const RE_THUMB = /Z4K|P4K|M4K|feature|web|thumb$/i;
106106
const walkOpts = {
107107
needStats: true,
108108
entryFilter: (f) =>

cmd/cmd_fixname.js

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import inquirer from "inquirer";
1212
import { cpus } from "os";
1313
import pMap from 'p-map';
1414
import path from "path";
15+
import * as core from '../lib/core.js';
1516
import { asyncFilter } from '../lib/core.js';
1617
import * as log from '../lib/debug.js';
1718
import * as enc from '../lib/encoding.js';
@@ -43,6 +44,13 @@ const builder = function addOptions(ya, helpOrVersionSet) {
4344
type: "boolean",
4445
description: "remove special chars in filename",
4546
})
47+
// 使用正则表达式替换文件名中的特定字符,比如问号
48+
// 如果数组只有一项,就是替换这一项为空白,即删除模式字符串
49+
// 如果有两项,就是替换第一项匹配的字符串为第二项指定的字符
50+
.option("replace", {
51+
type: "array",
52+
description: "replace regex pattern in filename [from,to]",
53+
})
4654
// 修复文件名乱码
4755
.option("encoding", {
4856
alias: "e",
@@ -78,9 +86,9 @@ const handler = async function cmdFixName(argv) {
7886
}
7987
const startMs = Date.now();
8088
log.show(logTag, `Input: ${root}`);
81-
if (!(argv.clean || argv.encoding || argv.tcsc)) {
82-
log.error(`Error: clean|encoding|tcsc,at least one is required`);
83-
throw new Error(`clean|encoding|tcsc,at least one is required`);
89+
if (!(argv.clean || argv.encoding || argv.tcsc || argv.remove)) {
90+
log.error(`Error: replace|clean|encoding|tcsc,at least one is required`);
91+
throw new Error(`replace|clean|encoding|tcsc,at least one is required`);
8492
}
8593
let files = await mf.walk(root, {
8694
needStats: true,
@@ -167,6 +175,15 @@ async function fixFileName(f) {
167175
const strPath = path.resolve(f.path).split(path.sep).join(' ')
168176
let oldBase = base;
169177
let newDir = oldDir;
178+
if (argv.replace?.[0]?.length > 0) {
179+
const rFrom = argv.replace[0];
180+
const rTo = argv.replace[1] || "";
181+
// 执行文件名字符替换操作
182+
// 按照正则表达式替换指定字符
183+
// 如果rTo为空则等于删除字符
184+
oldBase = oldBase.replaceAll(rFrom, rTo);
185+
oldBase = oldBase.replaceAll(new RegExp(rFrom, "gu"), rTo);
186+
}
170187
if (argv.encoding) {
171188
// 执行文件路径乱码修复操作
172189
// 对路径进行中日韩文字编码修复
@@ -179,10 +196,13 @@ async function fixFileName(f) {
179196
});
180197
// 重新组合修复后的目录路径
181198
newDir = path.join(...dirNamesFixed);
199+
if (core.isUNCPath(oldDir)) {
200+
newDir = "\\\\" + newDir;
201+
}
182202
// 显示有乱码的文件路径
183203
if (enc.hasBadUnicode(strPath)) {
184-
// log.showGray(logTag, `BadEnc:${++badCount}`, oldPath)
185-
// log.fileLog(`BadEnc: ${ipx} <${oldPath}>`, logTag);
204+
log.showGray(logTag, `BadEnc:${++badCount}`, oldPath)
205+
log.fileLog(`BadEnc: ${ipx} <${oldPath}>`, logTag);
186206
}
187207
}
188208
if (argv.clean) {
@@ -197,15 +217,15 @@ async function fixFileName(f) {
197217
const newName = `${oldBase}${ext}`
198218
const newPath = path.join(newDir, newName);
199219
if (newPath === oldPath) {
200-
log.info(logTag, `Same: ${ipx} ${helper.pathShort(newPath)}`);
220+
log.info(logTag, `Ignore Same: ${ipx} ${helper.pathShort(newPath)}`);
201221
f.skipped = true;
202222
}
203223
else if (await fs.pathExists(newPath)) {
204-
log.info(logTag, `Exists: ${ipx} ${helper.pathShort(newPath)}`);
224+
log.info(logTag, `Ignore Exists: ${ipx} ${helper.pathShort(newPath)}`);
205225
f.skipped = true;
206226
}
207227
else if (nameDuplicateSet.has(newPath)) {
208-
log.info(logTag, `Dup: ${ipx} ${helper.pathShort(newPath)}`);
228+
log.info(logTag, `Ignore Dup: ${ipx} ${helper.pathShort(newPath)}`);
209229
f.skipped = true;
210230
}
211231

cmd/cmd_shared.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ async function renameOneFile(f) {
2929
log.showYellow("Rename", "ignore", f.path);
3030
return;
3131
}
32+
log.showGray(`Source: ${f.path}`);
3233
try {
3334
// 确保输出目录已存在,如果不存在则创建
3435
const outDir = path.dirname(outPath);

lib/core.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,8 @@ export const compareSmart = (a, b) => {
8484
export function compareSmartBy(k) {
8585
return (a, b) => compareSmart(a[k], b[k]);
8686
}
87+
88+
export function isUNCPath(strPath) {
89+
const re = /^[\\\/]{2,}[^\\\/]+[\\\/]+[^\\\/]+/
90+
return re.test(strPath);
91+
}

lib/encoding.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export const REGEX_MESSY_CJK_EXT = /[\u8701-\u883f\u9200-\u9484]/u //生僻字:
3737
export const REGEX_MESSY_UNICODE = /[\u007f-\u00a0\u00c0-\u017f\u0400-\u1cff\u2070-\u24ff\u0e00-\u0e7f\u3400-\u4dbf\uac00-\uf8ff\ufe30-\ufe4f\ufff0-\uffff]/u
3838

3939
// 正则:只包含中文常用汉字,日文平假名片假名和ASCII字符
40-
export const RE_CHARS_MOST_USED = new RegExp(`^[${CHINESE_CHARS_3500}\\u3000-\\u303f\\uff66-\\uff9dA-Za-z0-9\\-_]+$`, 'ui')
40+
export const RE_CHARS_MOST_USED = new RegExp(`^[${CHINESE_CHARS_3500}\\u3000-\\u303f\\uff66-\\uff9dA-Za-z0-9\\-_ ]+$`, 'ui')
4141

4242
export function charUnique(str) {
4343
return String.prototype.concat.call(...new Set(str));
@@ -52,7 +52,7 @@ export function checkBadUnicode(str) {
5252
// 乱码标志 问号和黑问号
5353
results.push([true, 0, `非法字符`])
5454
}
55-
if (/[\u00c0-\u024f\u3100-\u312f\ua720-\ua7ff\uab30-\uabff]/u.test(str)) {
55+
if (/[\u00c0-\u00d6\u00d8-\u024f\u3100-\u312f\ua720-\ua7ff\uab30-\uabff]/u.test(str)) {
5656
// 乱码标志 拉丁字母扩展 注音符号
5757
results.push([true, 2, `拉丁字母扩展`])
5858
}
@@ -90,11 +90,11 @@ export function hasBadCJKChar(str) {
9090
export function fixCJKEnc(str) {
9191
let results = fixCJKEncImpl(str)
9292
results = results.filter(r => r[2] >= 0).sort((a, b) => b[2] - a[2])
93-
log.info('==================================')
94-
log.info(str)
93+
log.debug('==================================')
94+
log.debug(str)
9595
if (results?.length > 0) {
9696
for (const r of results) {
97-
log.info(r[0], '\t\t', r.slice(1))
97+
log.debug(r[0], '\t\t', r.slice(1))
9898
}
9999
}
100100
return results[0] || [str, false, 0, 'fallback'];
@@ -128,7 +128,7 @@ export function fixCJKEncImpl(str,
128128
}
129129
else {
130130
// fs.appendFileSync(tempfile, str + '\n')
131-
// return [[str, false, 0, '忽略0', ''],]
131+
return [[str, false, 0, '忽略0', ''],]
132132
}
133133
} else {
134134
if (strOnlyChinese(str) && !REGEX_MESSY_CJK_EXT.test(str)) {
@@ -178,9 +178,9 @@ export function fixCJKEncImpl(str,
178178
results.push([strDecoded, true, 99, `常用汉字`, `${enc1}=>${enc2}`])
179179
break
180180
}
181-
log.info(strDecoded, onlyCN, onlyJP, messyUnicode, messyCJK)
181+
log.debug(strDecoded, onlyCN, onlyJP, messyUnicode, messyCJK)
182182

183-
if (onlyJP) {
183+
if (onlyJP && strHasHiraKana(strDecoded)) {
184184
results.push([strDecoded, true, 78, `日文字符`, `${enc1}=>${enc2}`])
185185
}
186186
else if (onlyCN) {
@@ -208,6 +208,6 @@ export function fixCJKEncImpl(str,
208208
}
209209
results.push([str, false, 70, '原始字符串'])
210210
results = results.filter(r => r[2] >= threhold).sort((a, b) => b[2] - a[2])
211-
log.info(results.slice(3))
211+
log.debug(results.slice(3))
212212
return results;
213213
}

lib/file.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ export async function walk(root, options = {}) {
123123
}
124124
}
125125
startMs = Date.now();
126-
files = (await pMap(files, entryMapper, { concurrency: cpus().length * 2 }));
126+
files = (await pMap(files, entryMapper, { concurrency: cpus().length * 4 }));
127127
// files = files.sort(compareSmartBy('path'))
128128
needBar && bar1.update(files.length);
129129
needBar && bar1.stop();

lib/helper.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const ARCHIVE_FORMATS = [
2424

2525
const IMAGE_FORMATS = [
2626
".jpg",
27+
".jpe",
2728
".jpeg",
2829
".png",
2930
".avif",

lib/messy_hanzi.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
娾僾壒鑀葊蓭儑垵貋嶅摮謷謸慠巼弝垻跁贁斒螌褩闆螁捠邫艕闁怉堢賲藵菢袌虣儤揹藣郥偝偹僃蛽翉楍倴桳撪輽埲偪楅螕聛貏邲苾袐弻煏蓽蜌廦覍徧艑脿幖儦藨謤贆諘虌彆邠儐虨臏抦昞棅偋傡剝袚缽僠瓟葧艊攃婇傪朁摻儏謲傖賶嶆蓸敇蓛箣憡偛艖詧祡袃訍蠆幨攙僝儃剷嵼幝閳譂讇锠僘謿巐仦蛼諃迧茞軙樄曟趻贂棦偁僜罉脭庱彨彲翄懘趩翀憃蹖揰搊菗椆摴貙幮藸傗滀蓫儊諔臅暷輲僢菙堾輴滣偆賰娕偨蠀嬨皉茦莿螆茐棇蓯聦婃欉謥脨趗憱顣鑹櫕缞嶉磪脺膬臎乼竴虘蟽軑軚艜蹛聸僤蓞贉簹艡欓讜儅趤壔翢艔軇瓙脦艠櫈袛藡拞菧聜偙僀嶳傎嵮蹎奌婰蜔訋蓧恎昳绖戜惵褋艓帄倲埬菄徚蕫迵戙枓脰嬻讟螙偳褍塅嵟逇敪埵軃尮偔崿詻僫讍奀峏栭厼趰誀茷傠蕟忛勫柉羳鐢蠜奿訉軓婏蕜杮鐨翂訜岎幩蕡羵僨膹偑僼鎽霻摓艂覂賵覅缹缻邞紨岪翇虙葍粰呒蜅撨峊袝偩覄褔蕧祴忋槩忓尷仠堈掆罁焹戅菒藳犵鎶輵挭拲羾莻袧褠茩苽箛唃傦脵崓僱詿柺覌輨泴悺罆茪僙椝槼螝膭蛫嶡蓘輥謴濄彍聝惈螒譀迒貥茠椃諕蠔悎傐抲蠚峆楁詥貈螛礉垎袔熇詪悙脝噷叿渹輷鍧纮垬娂翃粠葒綋翝晎闂闀葔虖軤膴謼螜虝嫮熩鍙婲搳撶螖諙諣褢褱貛寏藧巟偟葟熿艎趪詤愰婎幑褘撝蜖詯僡藱儶孈梡佸旤艧僟銈賷鐖覉忣揤偮庴塉檝螏鍓艥妀茍茤紒惎葪諅乫貑鎵忦蛺幏惤葌椷椾蕳熸瀐鐧虃弿謭蠒鐗葥諓翞螀傋弶謽茮虠嶕膲儌憿敿訆漖趭菨堦脻謯迼偼媫楬蜐蓵蠞蠘悈蛶褯兓惍巹蓳僸濅賮葏聙蟼曔僒褧奺欍崌跔艍諊僪蹫聥乬邭袓埾虡寠勮懅貗脧鎸埍菤臇覐趹傕蕝臄觼貜覠鍕晙懏擖欬偘埳惂邟囥犺鈧趷揢翗愙艐摼埪涳郀跍趶廤褲姱儈旝邼狅軖軠岲聧楏虁蹞聭蕢樻聵熴閫閸睏翋菈搚藞攋蠟婡崍賴葻懢攔讕襽郞艆蜋鎯蓢樃崀僗鐒蔂儽壨虆欙傫藟蠝鑸銇攂倰菞棃艃褵謧邌孋邐涖脷厤棙蛠蝷曆儮曞蠇壢藶觻欐讈梿覝聫褳聮螊謰蹥羷僆墚輬脼嶛膫屪廫賿蹘藔尦尞茢迾脟巤儠冧晽粦亃癛旈藰嬼翏廇蕯壠慺艛謱塿蓾艣鐪菉趢蹗鯥虂藘捛屢儢曫虊惀菕錀埨覙鏍儸攞欏曪洜嬤螞杩傌屘鏋槾澷庬莾茻貓軞乮蓩覒愗嚜脢槑徾嵄媺跊菛虋夣詸擟攠葞覔覛榓偭覕搣懱僶慜蠠姳慏詺謩擵懡眿蛨暯銆藦鏌怽畞莯幙艒鎿袦軜摨嬭褦螚暔擃儾怓巎抐脮埿聣抳儗儞聻伲迡堄嫟愵跈蹍蹨艌褭揑惗菍巕讘钀脌甯儜蕽挊羺鐞傉搙蹃藲鏂掱輫渒溿嗙褜奅斾蓜嶏葐梈旇翍壀脴擗鷿楄覑僄蠙聠呯帲幈缾蓱蛢輧敀娝擈菐贌巭迉桼蛣僛諆亝旂帺掑軝愭懠艩蠐邔婍忔湇罊蟿缼婜孯諐偂軡脥嗛傔儙輤蹡廧羻趬菬癄藮趫帩僺聺蛪鍥嶔菦嫀慬懄蠄笉梫菣撳埥夝剠殑葝檾掅儬宆儝藭丠媝蓲趥訅蛷菃翑葋鑺蝺迲奍峑婘葲烇虇崅夋衻袇袡媣儴讱屻岃訒軔梕茙峵媶搑褣螎嬫巆傇輮鍒蕠曘嗕偄輭膶虄僿褬濏譅桬儍翜翣邖挻脠軕搧羴晱訕傓僐敾樿蟺謪绱蕱袑蛥蠂屾葠訷蓡詵邥谉渖諗曋脤蜄瘮苼曻鉎鍟偗渻賸邿褷鍦乭姼枾媞煶諟鏉杸掓軗虪慡脽虒恖蕬螄柶蕼愯廀摉叜傁擻梀傃藗葰嵗鐩蕵傞摍溑褨鏁褟枱炲菭儓嬯忲惔墰墵燂罈藫貚傝僋蹚傏漟偒幍轁貣膯幐邆虅偍蕛趧蹏鍗悐揥趯屇庣蓨宨嬥覜聼邒閮聤娗脡蓪峝晍詷膧媮妵庩悇捈梌鍎迌貒剸鏄褖蓷藬尵蹪俀僓蹆軘臋讬袥脫沲迱袉跅媧嗗邷夞帵貦埦脕贃暀蛧迋葨詴嶶蓶鍏闈愇撱諉儰苿叞菋媦藯讏塭輼轀螡閺脗妏顐璺螉聬攚罋涹偓楃擭臒弙箼螐祦儛屼忢悞嵍邜傒翖嶲橀熻螇貕觽觿椺謵鎴蹝呬忥恄蕮虩傄翈敮蕸僲憸蹮妶蛝輱藖獮鍌幰攇峴晛缐僩僴壏膷鑲蠁缿宯虓翛膮虈郩涍詨斅峫翓讗藛缷偞偰僁褉嶰邤杺軐脪蛵曐侀讻詾賯诇脙鏅潃褎褏螑晇訏虗谞虛蕦諝譃呴偦詡怴欰藚吅弲梋鋗蕿蠉蜁嫙檈晅袨眴鏇袕壆瀥焄壎臐壦攳迿訙吖笌漄蕥偣綖詽虤壛巗椼褗覎葕傿椻暥嬊觾讞輰鍚岟炴傟懩傜摿暚邎宎抭偠袎覞艞讑僷曅歋擛悘毉侇迻宧巸弬栘袘訑貤蛦箷彛螔謻讉庡逘偯敼螘帠袣埶幆晹蛡跇嫕蓺槸艗貖賹藙贀虉讛訔訚崯朄讔憗懚粌偀愥绬嫈罃褮僌巊彮逌偤輶栯脜蜏哊迶邘扵乻堬旕艅褕嬩鍝偊貐忬茟喐棫艈銉蓹薁繘軉澚惌邧貟酛茒媴嫄邍妴傆褑褤軏跀缊奫蝹鄖愪賱傊藴偺菑賳傤儎鐟趲蹔蹧艁趮幘樍諎謮賾蠌庂崱蠈熷譄吒偧鍘夈惉邅讝嶃偡虥虦傽慞蔁墇枛旐罀嫬袩悊詟謺讋乽桭葴嫃樼轃纼栚瑱掙衼嗭膱軄藢迣庢袟乿偫翐袠傂崻寘覟儨劕妐幒螤蹱茽偅诪荮粙葤詶僽噣笁曯斸迬殶跓膼跩塼僎壵漴娷諈迍棳斲諑斀斵謶灂蠗茊葘趦輺蓻惾葼鍐菆棷崒踿鎺栬晬鋷罇僔袏䐠
1+
娾僾壒鑀葊蓭儑垵貋嶅摮謷謸慠巼弝垻跁贁斒螌褩闆螁捠邫艕闁怉堢賲藵菢袌虣儤揹藣郥偝偹僃蛽翉楍倴桳撪輽埲偪楅螕聛貏邲苾袐弻煏蓽蜌廦覍徧艑脿幖儦藨謤贆諘虌彆邠儐虨臏抦昞棅偋傡剝袚缽僠瓟葧艊攃婇傪朁摻儏謲傖賶嶆蓸敇蓛箣憡偛艖詧祡袃訍蠆幨攙僝儃剷嵼幝閳譂讇锠僘謿巐仦蛼諃迧茞軙樄曟趻贂棦偁僜罉脭庱彨彲翄懘趩翀憃蹖揰搊菗椆摴貙幮藸傗滀蓫儊諔臅暷輲僢菙堾輴滣偆賰娕偨蠀嬨皉茦莿螆茐棇蓯聦婃欉謥脨趗憱顣鑹櫕缞嶉磪脺膬臎乼竴虘蟽軑軚艜蹛聸僤蓞贉簹艡欓讜儅趤壔翢艔軇瓙脦艠櫈袛藡拞菧聜偙僀嶳傎嵮蹎奌婰蜔訋蓧恎昳绖戜惵褋艓帄倲埬菄徚蕫迵戙枓脰嬻讟螙偳褍塅嵟逇敪埵軃尮偔崿詻僫讍奀峏栭厼趰誀茷傠蕟忛勫柉羳鐢蠜奿訉軓婏蕜杮鐨翂訜岎幩蕡羵僨膹偑僼鎽霻摓艂覂賵覅缹缻邞紨岪翇虙葍粰呒蜅撨峊袝偩覄褔蕧祴忋槩忓尷仠堈掆罁焹戅菒藳犵鎶輵挭拲羾莻袧褠茩苽箛唃傦脵崓僱詿柺覌輨泴悺罆茪僙椝槼螝膭蛫嶡蓘輥謴濄彍聝惈螒譀迒貥茠椃諕蠔悎傐抲蠚峆楁詥貈螛礉垎袔熇詪悙脝噷叿渹輷鍧纮垬娂翃粠葒綋翝晎闂闀葔虖軤膴謼螜虝嫮熩鍙婲搳撶螖諙諣褢褱貛寏藧巟偟葟熿艎趪詤愰婎幑褘撝蜖詯僡藱儶孈梡佸旤艧僟銈賷鐖覉忣揤偮庴塉檝螏鍓艥妀茍茤紒惎葪諅乫貑鎵忦蛺幏惤葌椷椾蕳熸瀐鐧虃弿謭蠒鐗葥諓翞螀傋弶謽茮虠嶕膲儌憿敿訆漖趭菨堦脻謯迼偼媫楬蜐蓵蠞蠘悈蛶褯兓惍巹蓳僸濅賮葏聙蟼曔僒褧奺欍崌跔艍諊僪蹫聥乬邭袓埾虡寠勮懅貗脧鎸埍菤臇覐趹傕蕝臄觼貜覠鍕晙懏擖欬偘埳惂邟囥犺鈧趷揢翗愙艐摼埪涳郀跍趶廤褲姱儈旝邼狅軖軠岲聧楏虁蹞聭蕢樻聵熴閫閸睏翋搚藞攋蠟婡崍賴葻懢攔讕襽郞艆蜋鎯蓢樃崀僗鐒蔂儽壨虆欙傫藟蠝鑸銇攂倰菞棃艃褵謧邌孋邐涖脷厤棙蛠蝷曆儮曞蠇壢藶觻欐讈梿覝聫褳聮螊謰蹥羷僆墚輬脼嶛膫屪廫賿蹘藔尦尞茢迾脟巤儠冧晽粦亃癛旈藰嬼翏廇蕯壠慺艛謱塿蓾艣鐪菉趢蹗鯥虂藘捛屢儢曫虊惀菕錀埨覙鏍儸攞欏曪洜嬤螞杩傌屘鏋槾澷庬莾茻貓軞乮蓩覒愗嚜脢槑徾嵄媺跊菛虋夣詸擟攠葞覔覛榓偭覕搣懱僶慜蠠姳慏詺謩擵懡眿蛨暯銆藦鏌怽畞莯幙艒鎿袦軜摨嬭褦螚暔擃儾怓巎抐脮埿聣抳儗儞聻伲迡堄嫟愵跈蹍蹨艌褭揑惗菍巕讘钀脌甯儜蕽挊羺鐞傉搙蹃藲鏂掱輫渒溿嗙褜奅斾蓜嶏葐梈旇翍壀脴擗鷿楄覑僄蠙聠呯帲幈缾蓱蛢輧敀娝擈菐贌巭迉桼蛣僛諆亝旂帺掑軝愭懠艩蠐邔婍忔湇罊蟿缼婜孯諐偂軡脥嗛傔儙輤蹡廧羻趬菬癄藮趫帩僺聺蛪鍥嶔菦嫀慬懄蠄笉梫菣撳埥夝剠殑葝檾掅儬宆儝藭丠媝蓲趥訅蛷菃翑葋鑺蝺迲奍峑婘葲烇虇崅夋衻袇袡媣儴讱屻岃訒軔梕茙峵媶搑褣螎嬫巆傇輮鍒蕠曘嗕偄輭膶虄僿褬濏譅桬儍翜翣邖挻脠軕搧羴晱訕傓僐敾樿蟺謪绱蕱袑蛥蠂屾葠訷蓡詵邥谉渖諗曋脤蜄瘮苼曻鉎鍟偗渻賸邿褷鍦乭姼枾媞煶諟鏉杸掓軗虪慡脽虒恖蕬螄柶蕼愯廀摉叜傁擻梀傃藗葰嵗鐩蕵傞摍溑褨鏁褟枱炲菭儓嬯忲惔墰墵燂罈藫貚傝僋蹚傏漟偒幍轁貣膯幐邆虅偍蕛趧蹏鍗悐揥趯屇庣蓨宨嬥覜聼邒閮聤娗脡蓪峝晍詷膧媮妵庩悇捈梌鍎迌貒剸鏄褖蓷藬尵蹪俀僓蹆軘臋讬袥脫沲迱袉跅媧嗗邷夞帵貦埦脕贃暀蛧迋葨詴嶶蓶鍏闈愇撱諉儰苿叞菋媦藯讏塭輼轀螡閺脗妏顐璺螉聬攚罋涹偓楃擭臒弙箼螐祦儛屼忢悞嵍邜傒翖嶲橀熻螇貕觽觿椺謵鎴蹝呬忥恄蕮虩傄翈敮蕸僲憸蹮妶蛝輱藖獮鍌幰攇峴晛缐僩僴壏膷鑲蠁缿宯虓翛膮虈郩涍詨斅峫翓讗藛缷偞偰僁褉嶰邤杺軐脪蛵曐侀讻詾賯诇脙鏅潃褎褏螑晇訏虗谞虛蕦諝譃呴偦詡怴欰藚吅弲梋鋗蕿蠉蜁嫙檈晅袨眴鏇袕壆瀥焄壎臐壦攳迿訙吖笌漄蕥偣綖詽虤壛巗椼褗覎葕傿椻暥嬊觾讞輰鍚岟炴傟懩傜摿暚邎宎抭偠袎覞艞讑僷曅歋擛悘毉侇迻宧巸弬栘袘訑貤蛦箷彛螔謻讉庡逘偯敼螘帠袣埶幆晹蛡跇嫕蓺槸艗貖賹藙贀虉讛訔訚崯朄讔憗懚粌偀愥绬嫈罃褮僌巊彮逌偤輶栯脜蜏哊迶邘扵乻堬旕艅褕嬩鍝偊貐忬茟喐棫艈銉蓹薁繘軉澚惌邧貟酛茒媴嫄邍妴傆褑褤軏跀缊奫蝹鄖愪賱傊藴偺菑賳傤儎鐟趲蹔蹧艁趮幘樍諎謮賾蠌庂崱蠈熷譄吒偧鍘夈惉邅讝嶃偡虥虦傽慞蔁墇枛旐罀嫬袩悊詟謺讋乽桭葴嫃樼轃纼栚瑱掙衼嗭膱軄藢迣庢袟乿偫翐袠傂崻寘覟儨劕妐幒螤蹱茽偅诪荮粙葤詶僽噣笁曯斸迬殶跓膼跩塼僎壵漴娷諈迍棳斲諑斀斵謶灂蠗茊葘趦輺蓻惾葼鍐菆棷崒踿鎺栬晬鋷罇僔袏䐠

package-lock.json

Lines changed: 12 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mediac",
3-
"version": "1.5.0",
3+
"version": "1.5.1",
44
"type": "module",
55
"description": "MediaCli is a multimedia file processing tool that utilizes ffmpeg and exiftool, among others, to compress/convert/rename/delete/organize media files, including images, videos, and audio.",
66
"main": "index.js",
@@ -75,6 +75,7 @@
7575
"sanitize-filename": "^1.6.3",
7676
"sharp": "^0.33.2",
7777
"throat": "^6.0.2",
78+
"upath": "^2.0.1",
7879
"which": "^4.0.0",
7980
"yargs": "^17.7.2"
8081
},

0 commit comments

Comments
 (0)