nodejs 实现的文件夹快速复制工具。适用于对存在海量小文件的目录进行选择性复制的需求场景。
对于前端开发来说,在 windows 系统下对某些庞大的目录进行复制时,系统自带的复制功能可能令人十分痛苦。如果你遇到此类需求,dfc 小工具或许可以帮助到你。
- 针对海量小文件,多线程复制速度快
- 自动跳过已存在且大小相同的文件
- 支持模糊过滤,忽略部分文件
- 支持按文件修改时间过滤,只复制新产生的文件
- more...
npm i -g @lzwme/dir-fast-copy
dfc --help
Usage: dfc [options] [command]
Commands:
cp [options] <srcPath> <destPath> 高效的复制目录
rm [options] <dirpath> 删除一个目录及其子目录
目录复制:
dfc cp --help
Usage: dfc cp [options] <srcPath> <destPath>
高效的复制目录
Options:
--debug 调试模式 (default: false)
-s, --slient 静默模式 (default: false)
--threads <num> 启动多线程的数量。小于 2 表示不启用多线程模式
--muti-thread-min-files 启用多线程的最小文件数,文件总数低于该值则使用单线程模式(最小值 1000,默认为 3000)
--exclude <reg...> 文件排除规则。普通的 glob 规则,支持多个参数
--min-date-time <1970-01-01T00:00:00> 文件最小日期,低于该日期的文件会被忽略(处理速度更快)
--no-skip-same-file 文件<名称与大小均相同>已存在时不跳过(覆盖)。
--skip-same-file 文件<名称与大小均相同>已存在时则跳过。 (default: true)
--progress-interval onProgress 进度回调(进度日志更新)的最小间隔时间(ms),不低于 100ms。默认值 2000
--cp-during-stats 多线程模式下,在收集文件信息过程中即开始文件复制(适用于文件数量多信息收集时间长的场景) (default: false)
-h, --help 查看帮助信息
示例:
dfc cp ./src ./dest
# 使用 8 子线程复制
dfc cp ./src ./dest --threads 8
# 多线程复制,在收集目录信息时即进行部分复制
dfc cp ./src ./dest --cp-during-stats
# 复制 src 目录至 dest,排除 node_modules 和 dist 目录,排除 .pyc 和 .obj 类型的文件
dfc cp ./src ./dest --exclude /node_modules/** dist/** *.{pyc, .obj}
# 只复制 2020-09-22 00:00:00 之后改动或创建的文件
dfc cp ./src ./dest --min-date-time 2020-09-22
# 强制复制所有文件
dfc cp ./src ./dest --no-skip-same-file
目录删除:
dfc rm --help
Usage: dfc rm [options] <dirpath>
删除一个目录及其子目录
Options:
-f, --force 强制删除,无需确认(否则删除前需确认) (default: false)
-h, --help 查看帮助信息
示例:
dfc rm ./lzwme-test1
dfc rm -f ./lzwme-test2
dfc rm -f ./lzwme-test3.txt
import { fastCopy } from '@lzwme/dir-fast-copy';
const config = {
src: './test-src',
dest: './test-dest',
onProgress: stats => console.log('onProgress:', onProgress),
onEnd: stats => console.log('onEnd:', onProgress),
};
fastCopy(config).then(stats => {
if (stats) console.log('done:', stats);
});
/** 默认配置 */
const config = {
/** 是否静默模式 */
slient: false,
/** 是否为 cmd 命令方式调用(dfc --src --dest) */
iscmd: false,
/** 源目录路径 */
src: '',
/** 输出目录路径 */
dest: '',
/** 是否尝试启用多线程模式 */
enableThreads: true,
/** 启用线程的最小文件数,文件总数低于该值则不启用多线程模式 */
enableThreadsMinCount: 500,
/** 文件过滤规则 */
filterRegList: [/\.pyc$/, /\/src\/out\//],
/** 文件最小日期,低于该日期的忽略 */
minDatetime: new Date('2000-09-15T00:00:00').getTime(),
/** 目的目录相同文件已存在是否跳过。为 false 则覆盖它 */
isSkipSameFile: true,
/** 结束时回调方法 */
onEnd: null,
/** 发出进度消息时的回调方法 */
onProgress: null,
};
@lzwme/dir-fast-copy
is released under the MIT license.
该插件由志文工作室开发和维护。