你如何递归命令输出指定的`scp`文件?

问题描述

我只想scp git 存储库中跟踪的文件

例如,我从 git ls-files 命令获得以下输出

$ git ls-files
someFile
src/file1.txt
src/file2.txt
anotherFile

scp 接受这样的输入:scp someFile src/file1.txt src/file2.txt anotherFile <destination>,我可以使用 scp $(git ls-files) <destination> 生成它。问题在于只是将所有文件转储到 <destination> 中,而不维护文件夹结构。我想为此使用 scp -r,但我不知道如何过滤文件,以便仅复制使用 git ls-files 命令显示文件。也许有一些方法可以使用 xargs 来...

解决方法

使用rsync

git ls-files | rsync -a --files-from=- . <destination>

如果没有,您可以使用 tar 创建一个 --files-from,并在另一侧使用 sshtar

如果没有,请创建一个临时目录,将所有文件复制到本地,同时保留目录结构,并使用 scp -r 复制该临时目录。