在 Windows 机器(cWrsync)上使用 rsync,我正在将一个带有子目录的大文件夹同步到需要几分钟才能完成的 Web 服务器。但是当用户只需要将文件添加到子目录时,我不希望他们不得不等待一个小时来同步该目录。
我的想法 在每个子目录 (1_sync.bat) 中添加一个文件,当他们在该目录中添加或删除文件时可以执行该文件。我需要批处理文件能够动态地告诉 rsync 要同步哪个目录。这是静态版本:
@echo off
REM Make environment variable changes local to this batch file
SETLOCAL
REM where ti find rsync and related files
SET CWRSYNCHOME=C:\cwRsync
SET HOME=C:\Users\greg\AppData\Roaming
SET CWORLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%\BIN;%PATH%
"C:\cwRsync\bin\rsync.exe" -v -e 'ssh -i C:\home\greg\.ssh\id_rsa' --delete --recursive --inplace "/cygdrive/z/1CustomerDocs/2017/Client Folder/" "root@domainname.com:/var/storage/customer_files/2017/Client\ Folder/"
在上面的示例中,我希望 Client Folder 是一个变量,它将检测批处理脚本实际在哪个文件夹中,这样我就可以通过每个子目录中的一个 bat 文件。
我尝试了 %~dp0 ,它几乎可以解决问题,但输出了整个路径。我只需要最后两个目录。
所以如果 %~dp0 = \SERVER-PATH\Content\1CustomerDocs\2017\Client Folder\
我希望我可以切断最后两个目录并有一个看起来像的变量
2017/Client 文件夹(但也需要一个为 linux 转义空格的文件夹)
所以最终结果看起来像
@echo off
REM Make environment variable changes local to this batch file
SETLOCAL
REM where ti find rsync and related files
SET CWRSYNCHOME=C:\cwRsync
SET HOME=C:\Users\greg\AppData\Roaming
SET CWORLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%\BIN;%PATH%
SET CUST_FOLDER_WINDOWS=*YOUR HELP NEEDED HERE*
SET CUST_FOLDER_LINUX=*YOUR HELP NEEDED HERE*
"C:\cwRsync\bin\rsync.exe" -v -e 'ssh -i C:\home\greg\.ssh\id_rsa' --delete --recursive --inplace "/cygdrive/z/1CustomerDocs/%CUST_FOLDER_WINDOWS%" "root@domainname.com:/var/storage/customer_files/%CUST_FOLDER_LINUX%"
再说一次,我需要 linux 文件夹来转义空格。
谢谢您的帮助!