仅 scp 某些文件

仅 scp 某些文件

我正在尝试通过 ssh 将更改的文件复制到 godaddy。Godaddy 很糟糕,所以他们当然不允许 rsync。我可以使用 scp,但我真的只想复制更改的文件。我认为这是不可能的,所以我想知道我是否可以只 scp 所有 php 文件。

但是有很多子目录,所以我需要使用 -r 选项。

有没有办法可以使用 scp 递归复制所有带有扩展名的文件php?就像这样:

scp -r -name "*php" /local/html/ user@server:/home/html/ (无效)

期望结果

//在本地机器上
$ 查找./源

源/1.php
源/2.php
源/子
源/sub/3.php
源/sub/4.php
源/sub/DONT-copy.txt
来源/sub/DONT-copy.png
源/子/子2
源/sub/sub2/5.php
源/sub/sub2/6.php

//复制文件的命令
$ [此处为 scp 命令]

//在远程服务器上
$ 查找./目的地

目的地/1.php
目的地/2.php
目的地/子
目标/子/3.php
目标/子/4.php
目的地/sub/sub2
目标/sub/sub2/5.php
目标/sub/sub2/6.php

这不起作用

//在本地机器上
$ 查找./源

源/1.php
源/2.php
源/子
源/sub/3.php
源/sub/4.php
源/sub/DONT-copy.txt
来源/sub/DONT-copy.png
源/子/子2
源/sub/sub2/5.php
源/sub/sub2/6.php

//复制文件的命令
$ cd 源; scp -r *.php 用户@远程:/目标

//在远程服务器上
$ 查找./目的地

目的地/1.php
目的地/2.php

也许我们也可以尝试使用 find,但我很确定这个不会按原样工作

查找./source -name "*.php" -exec scp {} user@remote:{} \;

那是行不通的,因为我认为你不能{}在查找中使用多个运算符。

另外,让路径在远程服务器上排列可能会很棘手,例如如果 find 返回/users/johndoe/documents/source/1.php并且您希望它最终位于/home/jane/www/destination/1.php远程服务器上。

答案1

当主机仅允许推送内容但不允许 rsync 时,我会执行以下操作:

  • 在本地机器上创建一个“影子”目录,以类似于目标结构
  • 用于rsync推送到该影子目录,并捕获输出(--log-file如果您想编写脚本的话)
  • rsync输出中,确定需要删除的文件,或者推送并列出列表
  • 也许(取决于你推送的方式):仅从需要更改的文件创建一个包
  • 启动推送工具 - ftp、scp 等等 - 并让它在列表中的文件上运行

答案2

你能不做吗scp -r *.php destination

答案3

scp -r 用户@ip:/data/files/*.php /tmp/files/

相关内容