【问题标题】:scp -r ... but leave out (exclude) a specified subdirectoryscp -r ...但省略(排除)指定的子目录
【发布时间】:2010-11-16 20:25:52
【问题描述】:

目录结构如下:

/a/
/a/b/
/a/c/

我想复制所有内容,除了 /a/c/ 子目录。

scp -rp myserver:/a .      # this will copy everything

问:如何在 scp 命令中指定要省略的目录?

【问题讨论】:

  • 最初的动机是子目录“/a/c/”非常大(千兆字节),因此将其保留会将副本从几分钟缩短到几秒钟。

标签: scp


【解决方案1】:

我不认为你可以,但你可以使用 rsync 吗?像这样的:

rsync -a --exclude=a/c myserver:/a .

【讨论】:

    【解决方案2】:

    我认为这可能是正确的方法,因此您仍在使用 SSH,我还没有找到使用 scp 的方法 - 但使用 rsync over ssh 可能会解决它。

    rsync -e 'ssh -ax' -av --exclude /a/c myserver:/a .
    

    如果你使用 -n 开关,那么它将创建一个空运行的过程:

     rsync -e 'ssh -ax' -av --exclude /a/c -n myserver:/a .
    

    【讨论】:

    • 也可以试试-rz-e "ssh -i private.pem" -rz 'users@server:/full/path/'
    【解决方案3】:

    您可以使用扩展通配符,如下例所示:

    #Enable extglob
    shopt -s extglob
    
    cp -rv !(./excludeme/*.jpg) /var/destination
    

    【讨论】:

      【解决方案4】:

      这不是完美的方法,但将要排除的子目录设置为只读。 chmod -R 444 /a/c 应该可以解决问题。当它尝试覆盖该目录时,您将收到“权限被拒绝”错误。

      【讨论】:

        猜你喜欢
        • 2012-05-13
        • 2020-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-08
        • 1970-01-01
        相关资源
        最近更新 更多