Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何将~/以外的文件夹中的多个文件从远程scp到本地?_Bash_Scp - Fatal编程技术网

Bash 如何将~/以外的文件夹中的多个文件从远程scp到本地?

Bash 如何将~/以外的文件夹中的多个文件从远程scp到本地?,bash,scp,Bash,Scp,我正在尝试创建一个bash expect脚本,该脚本接受用户、主机、密码和文件名等输入,然后将文件从远程复制到本地。从我目前所读到的内容来看,当您假设文件来自~/时,将多个文件从远程复制到本地效果很好,即: scp -r user@host:"file1 file2 file3" . 将文件1、文件2和文件3从~/复制到当前工作目录中。但是我需要能够作为参数传入另一个目录,所以我的bash脚本看起来像这样(但不起作用,我将解释如何): 这在第一个文件之后不起作用;shell在第一个文件之后引发

我正在尝试创建一个bash expect脚本,该脚本接受用户、主机、密码和文件名等输入,然后将文件从远程复制到本地。从我目前所读到的内容来看,当您假设文件来自~/时,将多个文件从远程复制到本地效果很好,即:

scp -r user@host:"file1 file2 file3" .
将文件1、文件2和文件3从~/复制到当前工作目录中。但是我需要能够作为参数传入另一个目录,所以我的bash脚本看起来像这样(但不起作用,我将解释如何):


这在第一个文件之后不起作用;shell在第一个文件之后引发了一个“No-this file or directory”错误,我认为这意味着脚本只在第一个文件的$dir上工作,然后返回到~/中,当然在那里找不到文件。我到处都找过这个问题的答案,但都找不到,一次只做一个文件会非常乏味

假设您的远程登录shell能够理解,这应该是可行的

scp $user@$host:$dir/"{$file1,$file2,$file3}" ~/Downloads

假设您的远程登录shell能够理解,这应该可以工作

scp $user@$host:$dir/"{$file1,$file2,$file3}" ~/Downloads

如果要下载具有特定模式的多个文件,例如,如果要下载所有zip文件,可以执行以下操作:


如果要下载具有特定模式的多个文件,例如,如果要下载所有zip文件,可以执行以下操作:


spawn
是怎么回事?你这样做是出于期待吗?如果您是,并且您这样做是为了发送密码,那么改为设置ssh密钥。我想我还没有仔细研究过,但如果我在理论上把这个程序放在某人的机器上为他们设置ssh密钥,那么如果他们不想设置ssh密钥呢?有没有办法只为这个程序设置ssh密钥而不通过~/.ssh文件夹?我不知道。但是,设置ssh密钥比将密码存储在纯文本中更安全,这一点你肯定没有错。无论如何,这会让我更轻松,谢谢你的帮助!
spawn
是怎么回事?你这样做是出于期待吗?如果您是,并且您这样做是为了发送密码,那么改为设置ssh密钥。我想我还没有仔细研究过,但如果我在理论上把这个程序放在某人的机器上为他们设置ssh密钥,那么如果他们不想设置ssh密钥呢?有没有办法只为这个程序设置ssh密钥而不通过~/.ssh文件夹?我不知道。但是,设置ssh密钥比将密码存储在纯文本中更安全,这一点你肯定没有错。无论如何,这会让我更轻松,谢谢你的帮助!我建议
“$user@$host:$dir”/{“$file1”、“$file2”、“$file3”}
因为
阻止大括号扩展。@Cyrus,我们想阻止扩展--扩展应该发生在远程系统上。我建议
“$user@$host:$dir”/{“$file1”、“$file2”、“$file3”}
,因为
防止大括号扩展。@Cyrus,我们要防止扩展--扩展应该发生在远程系统上。
scp -r user@host:/path/to/files/"*.zip" /your/local/path