如何通过命令行克隆整个远程目录树和文件结构但有空文件?

如何通过命令行克隆整个远程目录树和文件结构但有空文件?

在远程生产服务器上,我有一个包含超过 15 TB 数据的目录。此外,除了 Linux 权限之外,ACL 还大量用于允许部门、用户和守护程序微调访问。

对于我们的 CI/CD 管道和自动化测试,我需要测试这些权限的更改如何影响系统,但在此之前,我需要克隆测试环境中的生产内容。

我显然无法克隆 15 TB 的数据,而且我真的不关心数据,我只关心元数据(文件名、权限、时间戳 - 基本上所有信息都ls -lah返回。)

通过我的使用方式很容易看出我正在尝试做什么rsync

rsync -aAr --include='*/' --exclude='*' [email protected]:/my/directory/ /test/directory/

从目录的角度来看,这正是我所需要的。如果rsync有一个选项允许复制内容为 0 但文件名和属性完好无损的文件,问题就解决了。 (可以?)

现在,在我对目录运行上述 rsync 命令后,以下是我的处理方法。

ssh [email protected] 'find /my/directory -type f -exec ls -lah {} \;' > my.production.directory.files.txt

这给了我一个本地文件,其中内容包含如下数据行:

-rwxrwxrwx  1 owner  group    15K Oct 13 10:07 /my/directory/jobs.txt

它有 9 个字段,我将其传递给 awk 和 bash:

cat my.production.directory.files.txt | awk '{print "touch " $9 " && chown "$3":"$4" "$9}' | bash

我觉得必须有更好的方法。在我通过其他要应用的命令chmod和原始时间戳过滤该文件之前,是否有更有效的方法来执行此操作? like cphas with --attributes-onlyliketouchchowncan do with --reference,除了针对远程文件系统?

注意,答案必须直接在命令行上执行。我无法上传或依赖任何脚本。另外,我知道 getfacl -R 和 setfacl 将恢复权限,但它不会恢复时间戳和非权限相关的文件数据(我知道)。

答案1

这是一个疯狂的想法:如果你使用sshfs

  1. 使用以下命令在本地挂载远程目录sshfs

    sshfs remoteuser@remotehost:/my/directory /mountpoint
    
  2. 使用--attributes-only选项来cp重新创建文件结构:

    cp -a --attributes-only /mountpoint /test/directory
    
  3. 卸载 sshfs 文件系统:

    fusermount -u /mountpoint
    

这不需要在远程主机上安装任何其他软件。

相关内容