如何 `scp` 目录保留结构但只选择某些文件?

How to `scp` directory preserving structure but only pick certain files?

我需要安全复制 (scp) 以从 UNIX 命令行远程复制目录及其子结构。子目录有我想要的同名文件和一堆我不需要的其他东西。这是结构的样子。

directorytocopy
  subdir1
    1.wanted
    2.wanted
    ...
    1.unwanted
    2.notwanted
  subdir2
    1.wanted
    2.wanted
    ...
    1.unwanted
    2.notwanted
  ..

我只想要 .wanted 文件保留目录结构。我意识到可以编写 shell(我正在使用 bash)脚本来执行此操作。是否有可能以不那么蛮力的方式做到这一点?我不能复制整个东西并删除不需要的文件,因为我没有足够的 space。

Adrian 最擅长使用 rsync。您还可以使用 tar 来捆绑想要的文件:

cd directorytocopy
shopt -s nullglob globstar
tar -cf - **/*.wanted | ssh destination 'cd dirToPaste && tar -xvf -'

这里,使用 tar 的 -f 选项和文件名 - 来使用 stdin/stdout 作为存档文件。

这未经测试,可能会失败,因为存档可能不包含保存 "wanted" 文件的实际子目录。

假设 GNU tar 在源机器上,并假设所需文件的文件名不包含换行符并且它们足够短以适合 tar headers:

find /some/directory -type f -name '*.wanted' | \
    tar cf - --files-from - | \
    ssh user@host 'cd /some/other/dir && tar xvpf -'

rsync-exclude/include 列出@Adrian Frühwirth 的建议将是执行此操作的方法。