在源和目标中使用相同的目录/文件进行 scp 的快捷方式

alt*_*as5 3 bash scp brace-expansion

我经常将文件从开发环境更新到不同服务器中的生产环境,因此两个主机中的路径相同,更新文件并为scp参数指示相同路径成为一种重复过程。

有没有办法使用大括号扩展或其他带有scp参数的技术?我知道其中一个,origin 或 destination 必须user@host:在开头包含。

我正在尝试做的是:

scp user@{dev-server,production-server}:/path/to/file
Run Code Online (Sandbox Code Playgroud)

Zla*_*tko 5

我提出了两种并非全部使用 scp 的解决方案:

1. 使用.ssh/config来帮助

即:把这样的东西放在你的 .ssh/config 中

Host p
HostName production.domain.com
Host d
HostName development.domain.com
Run Code Online (Sandbox Code Playgroud)

然后你可以缩短你的 scp 命令:

scp user@d:/path user@p:/path
Run Code Online (Sandbox Code Playgroud)

2. 使用git等源代码控制软件。因此,当您完成调试和编码等工作时,您可以这样做(简化):

git add /path/to/my_file
git commit -m "new version and features done"
git push production master
Run Code Online (Sandbox Code Playgroud)

(只需设置您的 git 以使用 ssh)

3. 使用 qscp 或 quick-scp - 一个专为您的方便而设计的 bash 脚本 :) https://github.com/zladuric/quick-scp 基本上,获取 qscp 文件并使其可执行。(并将默认值更改为您的环境)。

它将采用一个强制性参数和两个可选参数。例子:

./qscp file     # it will use defaults
./qscp path/to/dir  dest.server.com # uses default source, but to other dest
./qscp /abs/path/to/file dest.srv.com src.srv.com # takes both dest and source server args
Run Code Online (Sandbox Code Playgroud)

scrpt 应该很容易根据您的特定需求进行定制,但它还不是非常健壮。您可能需要调整 scp 二进制文件、ssh_key 文件或类似文件的位置。

他们的苹果呢?:)