文件同步工具
可用于固定或有规律的文件复制、删除、移动功能,以及文件夹单向或双向同步。
中文 | English
go1.16.15
- 下载发行版本 这里.
- 下载仓库:
go get -u github.com/xuzhuoxi/FileSync
- 如果你已经下载整个仓库及相关依赖仓库,你可以执行(goxc_build.sh)进行构建来获得执行程序。
- 如有必要,你可以修改 (goxc_build.sh)来进行自定义的构造,构造工具的说明在这里.
- 仅支持命令行运行
- 例子
支持两类命令行行为
- 使用加载配置文件中的参数运行:
命令格式:执行文件路径 -file=配置文件路径 -main=配置任务名/配置任务组名
配置文件格式说明请参考:配置文件说明- 指定具体执行任务执行, 如:
FileSync -file=demo.yaml -main=copy
- 不指定具体执行任务,执行配置文件中默认任务,如:
FileSync -file=demo.yaml
- 直接在命令行设置参数运行
命令格式:工具路径 -mode=执行模式 -src=来源信息 -tar=目录信息 -include=选择处理设置 -exclude=排除处理设置 -args=执行参数
例如:
FileSync -mode=copy -src=/data/src1/*;/data/src2 -tar=/data/tar include=*.jpg exclude=*.txt args=/Lf/Lp/r/s
-
功能说明
清除空目录 -
必要参数
- mode
mode=clear - src
只针对目录处理
- mode
-
可选参数
- include
只支持dir部分,忽略file部分 - exclude
只支持dir部分,忽略file部分 - args
- 支持执行参数: /Lf /Lp /r
- /r
- 启用:目录及子目录中不包含文件时,会被清除
- 关闭:目录为空时,会被清除
- 具体执行参数说明请看执行参数说明
- include
-
忽略参数:tar
-
功能说明
复制文件或目录到指定目录 -
必要参数
-
可选参数
- include
详情请看这里
特殊要求:-args中/file启用时忽略 - exclude
详情请看这里
特殊要求:-args中/file启用时忽略 - file
当月file参数启用且为true时,include与exclude将被忽略,且src为文件路径、tar也为文件路径。 - args
- 支持执行参数:/i /Lf /Lp /r /s /size /time
- /i
- 启用:命中到的目录不加入到处理列表,结果为空目录不会被复制
- 关闭:命中到的目录会加入到处理列表,结果为空目录会被复制
- /r
- 启用:会扫描src指定的文件,以及目录及子目录的全部文件
- 关闭:只扫描src指定的目录及文件
- /s
- 启用:复制文件时会按照原来的目录结构进行复制
- 关闭:全部文件或空目录平铺复制到tar目录下,名字相同则覆盖
- /file
- 启用:单文件处理模式,src与tar必须为文件路径。忽略include和exclude参数。
- 关闭:默认
- /size
- 启用:只有目标文件不存在或源文件的size大于目标文件时才进行复制并覆盖
- /time
- 启用:只有目标文件不存在或源文件的修改时间大于目标文件时才进行复制并覆盖
- /md5
- 启用:只有目标文件不存在或源文件的md5值不等于目标文件时才进行复制并覆盖
- 注意
- /size、/time与/md5都关闭时,直接复制
- /size、/time与/md5都启用时,同时满足才会复制
- 具体执行参数说明请看执行参数说明
- include
-
功能说明
删除文件或目录 -
必要参数
- mode
mode=delete - src
目录及文件列表
- mode
-
可选参数
-
忽略参数:tar
-
功能说明
移动文件或目录到指定目录 -
必要参数
-
可选参数
- include
详情请看这里
特殊要求:-args中/file启用时忽略 - exclude
详情请看这里
特殊要求,-args中/file启用时忽略 - args
- 支持执行参数:/i /Lf /Lp /r /s /size /time
- /i
- 启用:命中到的目录不加入到处理列表,结果为空目录不会被移动
- 关闭:命中到的目录会加入到处理列表,结果为空目录会被移动
- /r
- 启用:会扫描src指定的文件,以及目录及子目录的全部文件
- 关闭:只扫描src指定的目录及文件
- /s
- 启用:复制文件时会按照原来的目录结构进行移动
- 关闭:全部文件或空目录平铺复制到tar目录下,名字相同则覆盖
- /file
- 启用:单文件处理模式,src与tar必须为文件路径。忽略include和exclude参数。
- 关闭:默认
- /size
- 启用:只有目标文件不存在或源文件的size大于目标文件时才进行移动并覆盖
- /time
- 启用:只有目标文件不存在或源文件的修改时间大于目标文件时才进行移动并覆盖
- /md5
- 启用:只有目标文件不存在或源文件的md5值不等于目标文件时才进行移动并覆盖
- 注意
- /size、/time与/md5都关闭时,直接移动
- /size、/time与/md5都启用时,同时满足才会移动
- 只有文件移动完成后,源目录为空才会执行目录移动
- 具体执行参数说明请看执行参数说明
- include
-
功能说明
双向同步两个目录 或 单向同步 -
必要参数
- mode
mode=sync - src
源目录,只支持目录路径,不支持多个,不支持通配符 - tar
目标目录,只支持目录路径,不支持多个,不支持通配符
- mode
-
可选参数
- include
无特殊要求,详情请看这里 - exclude
无特殊要求,详情请看这里 - args
- 支持执行参数:/d /i /Lf /Lp /r /size /time
- /d
- 启用:双向同步
- 关闭:单身同步,src => tar
- /i
- 启用:命中到的目录不加入到处理列表,结果为空目录不会被同步
- 关闭:命中到的目录会加入到处理列表,结果为空目录会被同步
- /r
- 启用:会扫描src指定的文件,以及目录及子目录的全部文件
- 关闭:只扫描src指定的目录及文件
- /size
- 启用:只有目标文件不存在或源文件的size大于目标文件时才进行同步并覆盖
- /time
- 启用:只有目标文件不存在或源文件的修改时间大于目标文件时才进行同步并覆盖
- /md5
- 启用:只有目标文件不存在或源文件的md5值不等于目标文件时才进行同步并覆盖
- 注意
- /d启用时,/size和/time有且只有一个启用,并且不支持/md5参数
- /d关闭时,/size、/time与/md5至少有一个启用,两个都启用时为且关系
- 同步功能必然会保持目录结构
- 具体执行参数说明请看执行参数说明
- include
使用yaml格式的配置文件,结构如下:
main: string //默认,可填入 任务名 或 任务组名称
groups: //任务组数组
- {
name: string //任务组名称,用于区分每个任务或任务组
tasks: string //目标任务列表,各个任务间使用英文逗号“,”分隔
}
sequences: //任务队列数组
- {
name: string //任务队列名称,用于区分每个任务或任务组
tasks: string //目标任务列表,各个任务间使用英文逗号“,”分隔
}
tasks: //任务数组
- {
name: string //任务名称: 用于区分每个任务或任务组
mode: string //任务模式: 用于区分任务真实的执行行为
src: string //任务来源: 任务的文件或目录来源,支持通配符
tar: string //任务目标: 任务的文件或目录的去处
include: string //包含配置: 任务来源的命中包含设置,支持通配符
exclude: string //排序配置: 任务来源的命中排除设置,支持通配符
args: string //执行参数: 执行时的行为参数设置
}
- 用于区分不同任务和任务组
- 来源路径,支持多个路径,使用";"分隔
- 支持通配符路径,如”\data\*.png“, "*"匹配[0,n)个字符
- 注意:"\data"和"\data\"相同,指的是data目录,"\data\*"指的是data目录下的全部文件
- 格式:“file:*.jpg,123.png;dir:folder1,fi*er2,fi*”,"file"部分与"dir"部分使用";"分隔
- 注意:不配置"-include"或者"-include=空"时,匹配全部src符合要求的文件
- file部分
支持具体文件名,如 "123.png"等
支持通配符,如 "*.jpg"、"a*b.jpg"等,其中"*"匹配[0,n)个字符
多个使用","分隔 - dir部分
支持具体文件名,如 "folder1"
支持通配符,如 "fi*er2"、"fi*"等,其中"*"匹配[0,n)个字符
多个使用","分隔
- 格式:“file:*.jpg,123.png;dir:folder1,fi*er2,fi*”,"file"部分与"dir"部分使用";"分隔
- 注意:不配置"-exclude"或者"-exclude=空"时,不排除文件
- file部分
支持具体目录名,如 "123.png"等
支持通配符,如 "*.jpg"、"a*b.jpg"等,其中"*"匹配[0,n)个字符
多个使用","分隔 - dir部分
支持具体文件名,如 "folder1"
支持通配符,如 "fi*er2"、"fi*"等,其中"*"匹配[0,n)个字符
多个使用","分隔
- 说明:开启双向同步,默认为单向
- 适用范围: sync
以下为文件的命中判断的常规逻辑
- src中的通配符
- 目录
- 文件
- 通配符
- exclude中的通配符(如果存在)
- 符合:排除
- 不符合:进行下一步判断
- include中的通配符(如果存在)
- 符合:加入到命中列表
- 不符合:排除
注意:
- 支持指定配置运行和直接参数运行两类命令行功能
- 注意优先级:指定配置运行 > 直接参数运行
- 指定配置运行:
命令格式:工具路径 -file=配置文件路径 -main=配置任务名/配置任务组名
配置文件格式说明请参考:配置文件格式
- 形式一:指定具体执行任务执行
例子:
FileSync -file=demo.yaml -main=copy
- 形式二:不指定具体执行任务,执行配置文件中默认任务 例子:
FileSync -file=demo.yaml
- 直接参数运行
命令格式:工具路径 -mode=执行模式 -src=来源信息 -tar=目录信息 -include=选择处理设置 -exclude=排除处理设置 -args=执行参数
例子:
FileSync -mode=copy -src=/data/src1/*;/data/src2 -tar=/data/tar include=*.jpg exclude=*.txt args=/Lf/Lp/r/s
xuzhuoxi
xuzhuoxi@gmail.com or mailxuzhuoxi@163.com
FileSync source code is available under the MIT License.