我正在尝试通过 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/