我正在尝试将rsync
文件从目录添加incoming
到名为的目录中outgoing
,即
/testcopy/folder1/incoming/test1.txt
至
/testdest/folder1/outgoing/
目录来源:
/testcopy/folder1/incoming/test1.txt
/testcopy/folder1/incoming/test2.txt
/testcopy/folder2/incoming/test1.txt
/testcopy/folder2/incoming/test2.txt
/testcopy/folder3/incoming/test1.txt
/testcopy/folder3/incoming/test2.txt
目录目标:
/testdest/folder1/outgoing/
/testdest/folder2/outgoing/
/testdest/folder3/outgoing/
我希望目的地看起来像什么:
/testdest/folder1/outgoing/test1.txt
/testdest/folder1/outgoing/test2.txt
/testdest/folder2/outgoing/test1.txt
/testdest/folder2/outgoing/test2.txt
/testdest/folder3/outgoing/test1.txt
/testdest/folder3/outgoing/test2.txt
rsync
我尝试过的脚本:
touch /testcopy/folder3/incoming/test4.txt
我希望看到的是test4.txt
文件在/testdest/folder3/outgoing/
# rsync -av /testcopy/*/incoming/* /testdest/*/outgoing/
sending incremental file list
sent 520 bytes received 12 bytes 1,064.00 bytes/sec
total size is 0 speedup is 0.00
我已经尝试了上述脚本的几次不同迭代,但似乎无法正确完成。
rsync
不允许重写源和目标之间的路径。
相反,您可以rsync
为每个/testcopy/*/incoming
目录调用一次:
for srcdir in /testcopy/*/incoming/; do
[ ! -d "$srcdir" ] && break
destdir=/testdest/${srcdir#/testcopy/} # replace /testcopy/ with /testdest/
destdir=${destdir%/incoming/}/outgoing/ # replace /incoming/ with /outgoing/
mkdir -p "$destdir" &&
rsync -av "$srcdir" "$destdir"
done
对于每个incoming
目录,通过将/testcopy/
路径前缀替换为/testdest/
并将/incoming/
路径后缀替换为来构造目标路径/outgoing/
。这是使用两个标准参数替换完成的。
循环还会创建目标目录,以防万一该目录不存在。
该[ ! -d "$srcdir" ] && break
在循环的开始,可确保mkdir
与rsync
如果模式不匹配任何不运行(外壳将被保留默认模式未膨胀的,除非你是zsh
)。在中bash
,您可能要shopt -s nullglob
在循环之前使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句