具有不同名称的 Rsync 文件目录

具有不同名称的 Rsync 文件目录

我正在尝试将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

我已经尝试了上述脚本的几个不同的迭代,但似乎无法正确执行。

答案1

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循环开始处的 可以确保,如果模式与任何内容都不匹配,则不会运行mkdirand rsync(默认情况下,shell 会保持模式不展开,除非您位于 中zsh)。在 中bash,您可能想shopt -s nullglob在循环之前使用。

相关内容