【强塞】使用BAT脚本自动打包文件夹用于Resilio Sync同步

吐槽/反馈/建议:咸鱼哪有心

在Resilio Sync的任务文件夹内,会有一个隐藏的.sync文件夹,其内有一个IgnoreList文件,其中列出的文件在扫描传输时会被忽略,在其结尾追加下边两行:

*\*
*/*

[将此处节点称为节点A]

其效果是,对于与.sync同级的文件夹,该文件夹内的文件或子文件夹将不会被同步出去,已经同步出去的并不会被删除,但是将收不到来自节点A的针对该文件夹内容的后续变更。对于其他拥有写权限的节点,其对匹配文件夹内容的修改也应该也会被节点A忽略。

上一段表述中一直在强调【文件夹下的内容】,是因为目前并没有探明如何【区别文件夹与非文件夹,然后只排除文件夹(连带内容)】,所以仍然会同步一个空文件夹出去。。不过相对来说还是可以接受的。

[相对什么可以接受?]

用归档文件来提升移动硬盘的小文件写入性能,可行吗?:
https://meta.appinn.net/t/topic/18911

其实不管是用Resilio Sync或其他网盘方案上传同步,还是分区/介质之间拷贝移动,大量的小文件传输都是很耗时间的。

以下引用出自上边贴子的16楼

jerrylus:

我自己迁移大量小文件是打包(zip,压缩级别不压缩),因为大量小文件迁移的时候不仅需要迁移数据本身,同时也需要修改文件系统内的文件索引,而创建/修改索引的操作通常导致一部分写入次数的放大(复制一个文件还要去创建对应的文件夹层级、元数据…)。体感上,虽然有打包/解包的时间,但是相对于直接复制,还是能快很多的。


对于需要时不时更新的文件夹,尤其是类似Resilio Sync这样的使用场景,可以配合前边说的排除规则然后使用下边的脚本实现自动打包和更新。

@echo off

REM 执行时遍历与脚本自身同级的文件夹并打包
REM 如果已经存在相应压缩包时则比较时间,,如果文件夹时间比压缩包时间新则重新压缩
REM 文件夹的时间为该文件夹的直接子文件或子文件夹的创建时间(最新的那一个)
REM 可通过在文件夹在新建空白文件后删除强制更新时间 ←← 比较蛋疼,求更科学的方案

REM zip_path为存放压缩包的目录,文件夹请事先创建好;
REM 默认为脚本所在目录

REM set zip_path=E:\test\

if not defined zip_path (
  set zip_path=%~dp0
)
set x_path=%~dp0
echo %x_path%
for /f %%i in ('dir /ad-h /b /od') do (
  echo %%~ni
  echo %%~ti
  if not exist "%zip_path%%%~ni.zip" (
    cd %x_path%%%~ni
    "C:\Program Files\WinRAR\WinRAR.exe" a -r -m4 -ep1 "%zip_path%%%~ni.zip" *
  ) else (
    for /f %%j in ('dir %zip_path%%%~ni.zip /b') do (
      echo %%~tj
      if %%~ti GTR %%~tj (
        del "%zip_path%%%~ni.zip"
        cd %x_path%%%~ni
        "C:\Program Files\WinRAR\WinRAR.exe" u -r -m4 -ep1 "%zip_path%%%~ni.zip" *
      )
    )
  )
  echo ----------------
  cd %x_path%
)
pause

REM EQU - 等于
REM NEQ - 不等于
REM LSS - 小于
REM LEQ - 小于或等于
REM GTR - 大于
REM GEQ - 大于或等于

本文标题:《【强塞】使用BAT脚本自动打包文件夹用于Resilio Sync同步》作者:沉冰浮水
原文链接:https://www.wdssmq.com/post/20200916854.html
特别注明外均为原创,转载请注明。

分享到微信

扫描二维码

可在微信查看或分享至朋友圈。

上一篇: 【列表】上一部

相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

网站分类

搜索

控制面板

您好,欢迎到访网站!
  查看权限

最新留言

友情链接

召唤伊斯特瓦尔