【问题标题】:How to `scp` directory preserving structure but only pick certain files?如何`scp`目录保留结构但只选择某些文件?
【发布时间】:2015-08-28 15:39:45
【问题描述】:

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

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

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

【问题讨论】:

  • rsync 与排除列表一起使用。
  • rsync 似乎有效!不过,我还没有尝试过以下答案中的选项。我对如何将 rsync 标记为已接受的答案感到困惑。 @AdrianFrühwirth
  • 只需发布您最终使用的内容并接受您自己的答案,这样做没有错 :-) @HanSolo

标签: bash scp


【解决方案1】:

rsync-exclude/include 列出@Adrian Frühwirth 的建议是这样做的。

【讨论】:

    【解决方案2】:

    假设源计算机上有 GNU tar,并假设所需文件的文件名不包含换行符,并且它们足够短以适合 tar 标头:

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

    【讨论】:

      【解决方案3】:

      Adrian 最好使用rsync。您也可以使用tar 来捆绑想要的文件:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-17
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多