bash - 如何在 ~/ 以外的文件夹中将多个文件从远程 scp 到本地?
问题描述
我正在尝试制作一个 bash 预期脚本,该脚本接受用户、主机、密码和文件名等输入,然后将文件从远程复制到本地。从我目前所读的内容来看,当您假设文件来自〜/时,将多个文件从远程复制到本地工作得很好,即:
scp -r user@host:"file1 file2 file3" .
将 file1、file2 和 file3 从 ~/ 复制到当前工作目录。但是我需要能够将另一个目录作为参数传递,所以我的 bash 脚本看起来像这样(但不起作用,我将解释如何):
eval spawn scp -oStrictHostKeyChecking=no -oCheckHostIP=no -r $user@$host:$dir/"$file1 $file2 $file3" ~/Downloads
这在第一个文件之后不起作用;shell 在第一个文件之后引发“没有这样的文件或目录”错误,我认为这意味着该脚本仅适用于第一个文件的 $dir,然后返回 ~/ 并且当然找不到文件那里。我到处寻找答案,但找不到,一次做一个文件会非常乏味。
解决方案
假设您的远程登录 shell 理解Brace Expansion,这应该可以工作
scp $user@$host:$dir/"{$file1,$file2,$file3}" ~/Downloads
推荐阅读
- python - 删除表并将新的从 Pandas 写入 Postgres
- asp.net-mvc - 在列表组项中添加输入文本框以及文本
- c# - RichtextBox 自动将文本方向更改为 RightToLeft
- r - 如何找到与特定单词分组的主题和短语(动词/形容词)?
- python - 如何通过 HTTP 将文件发送到 Telegram 机器人?
- laravel - 为什么 Spatie/Image 包即使只处理尺寸也会压缩图像?
- c++ - 切换循环结束时未显示的游戏总数
- java - 使图像与文字一样高
- wpf - Caliburn.Micro 我应该使用 Screen 还是 Conductor.AllActive 作为我的父视图
- android - AndroidX 的未解决参考 ActivityTestRule