![在源和目标中使用相同的目录/文件进行 scp 的快捷方式](https://linux22.com/image/24722/%E5%9C%A8%E6%BA%90%E5%92%8C%E7%9B%AE%E6%A0%87%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%9A%84%E7%9B%AE%E5%BD%95%2F%E6%96%87%E4%BB%B6%E8%BF%9B%E8%A1%8C%20scp%20%E7%9A%84%E5%BF%AB%E6%8D%B7%E6%96%B9%E5%BC%8F.png)
我经常将文件从开发环境更新到不同服务器中的生产环境,因此两台主机中的路径相同,并且更新文件并指示参数的相同路径成为一种重复过程scp
。
有没有办法使用大括号扩展或其他带有scp
参数的技术?我知道其中之一,出发地或目的地必须user@host:
在开头包含 。
我想做的是:
scp user@{dev-server,production-server}:/path/to/file
答案1
我提出了两种并非全部使用 scp 的解决方案:
1. 使用.ssh/配置帮助
即:将类似的内容放入您的 .ssh/config 中
Host p
HostName production.domain.com
Host d
HostName development.domain.com
然后你可以缩短你的 scp 命令:
scp user@d:/path user@p:/path
2.使用git等源代码管理软件。因此,当您完成调试和编码等工作后,您可以执行以下操作(简化):
git add /path/to/my_file
git commit -m "new version and features done"
git push production master
(只需设置你的 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
该脚本应该很容易根据您的特定需求进行定制,但它还不是非常强大。您可能需要调整 scp 二进制文件、ssh_key 文件或类似文件的位置。
他们的苹果怎么样? :)
答案2
我认为最好为每次执行的命令添加别名,以减少输入。
.bashrc
在用户的文件中添加命令:
alias tx='scp user@{dev-server,production-server}:/path/to/file'
这将有助于减少键入整个命令时可能发生的键入错误。
但我认为你这样做的方式根本不正确。正如 zladuric 在第二种方式中所说的那样,您应该使用某种版本控制系统来维护代码数据库。这将允许您恢复到任何以前的版本。