【问题标题】:Rsync file automatically creating directoryrsync 文件自动创建目录
【发布时间】:2023-12-30 18:43:01
【问题描述】:

我是 rsync 的初学者。 我有一个文件“filelist.txt”,其中包含一些具有完整路径的文件:

/tmp/folder1/file.txt
/tmp/folder2/file.txt
/tmp/folder2/file.txt

我想将这些文件从服务器 A 复制到服务器 B,并在需要时创建目录。 这个文件一天可以进化好几次,所以我不想在传输文件之前在其他服务器上手动处理目录创建。

所以我用了:

cat filelist.txt | xargs -I {} rsync -r {} admin@riw-appcmd.i-wel.fr:{}

但我对每一行都有:

rsync: change_dir#3 "/tmp/folder1" failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(632) [receiver=3.0.3]
rsync: connection unexpectedly closed (8 bytes received so far) [sender]

我做错了什么?

【问题讨论】:

标签: bash sh rsync file-transfer scp


【解决方案1】:

您可以使用--relative 选项。例如:

rsync --files-from filelist.txt -R -av / user@host:/

根据rsync manual

  • -R,--相对

    使用相对路径。这意味着将在命令行中指定的完整路径名发送到服务器,而不仅仅是文件名的最后部分。这在您想同时发送多个不同的目录时特别有用。例如,如果您使用以下命令:

        rsync -av /foo/bar/baz.c remote:/tmp/
    

    ...这将在远程机器上的/tmp/ 中创建一个名为baz.c 的文件。如果你使用了

        rsync -avR /foo/bar/baz.c remote:/tmp/
    

    然后将在远程计算机上创建一个名为 /tmp/foo/bar/baz.c 的文件,并保留其完整路径。这些额外的路径元素称为“隐含目录”(即上例中的"foo""foo/bar" 目录)。

    [...]

【讨论】:

  • 它有效,但我仍然有一些奇怪的错误:构建文件列表...完成无法删除非空目录:tmp 无法为新符号链接让路:tmp tmp/folder2/tmp/folder2 /file.txt tmp/folder2/toto.sh 发送 254 字节接收 70 字节 129.60 字节/秒总大小为 26 加速为 0.08 rsync 错误:无法在 /System/Volumes/Data/SWE 传输某些文件(代码 23) /macOS/BuildRoots/d7e177bcf5/Library/Caches/com.apple.xbs/Sources/rsync/rsync-55/rsync/main.c(996) [sender=2.6.9]
  • 在 cmets 中只允许有限的格式。不利于讨论。请提出一个新问题。