rsync 仅文件名

rsync 仅文件名

是否有可能仅有的rsync 文件名?我有一个存储盒,想将文件名(及其路径)添加到另一个存储盒中。我目前正在使用 创建每个文件touch(它们将以 0 字节大小创建)。这花费的时间太长了,我想知道是否可以用 实现自动化rsync

如果没有,还有其他工具可以实现这个功能吗?还是我需要编写一些自定义代码?

答案1

如果您的目的是创建空文件,那么可以像这样创建模板:

#!/bin/bash
FILES=$1 # original structure
TMPL=$2  # where to create empty files
[[ -d $FILES ]] || exit 1
[[ -d $TMPL ]] || mkdir -p $TMPL || exit 1

cd $TMPL
find "$FILES" -type d -printf "$TMPL%p\0" | sort -z |xargs -0 -L 1000 mkdir -p
find "$FILES" -type f -printf "$TMPL%p\0" | xargs -0 -L 1000 touch

这将根据原始树创建每个文件的目录,并触及 TMPL 下创建的文件夹中的文件。

创建仅包含空文件的“镜像”文件夹后,它可以像任何其他文件夹一样 rsynced 到任何主机:

rsync -av -e 'ssh -p 22 -l username' \
    /template/structure remotehost:/backup/templates/

如果两个主机上的用户名相同,并且 sshd 在默认端口上运行,则 -e 选项是可选的。请注意在 from 和 to 部分中指定尾部斜杠时会发生什么。这很重要。remotehost 参数可能是 IP 地址而不是别名。

答案2

rsync本身似乎没有仅创建文件的选项。但是,您可以尝试各种方法,而不是手动使用 touch:

  • rsync 目录树,然后find在该树的根目录下运行并echo "" >进入每个文件
  • 用来find获取目录树的列表,然后mkdir -p在该列表的每个元素上使用(可能事先进行反向排序以尽量减少系统调用的数量),然后touch在类似创建的文件列表上使用。

但是,如果有可用空间,我会选择第一个选项,因为它保留了权限和访问权限(给出了适当的参数rsync)。

相关内容