Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
用于使用SSH复制多个文件的Bash别名函数_Bash_Ssh_Command Line Interface_Alias - Fatal编程技术网

用于使用SSH复制多个文件的Bash别名函数

用于使用SSH复制多个文件的Bash别名函数,bash,ssh,command-line-interface,alias,Bash,Ssh,Command Line Interface,Alias,我想将多个文件从一台服务器复制到另一台服务器,我必须使用scp从服务器复制到本地,然后从本地复制到服务器 我使用 它适用于这样的单个文件 copy_文件temp1 但当我试图复制多个文件时,如图所示 copy_文件{temp1,temp2} 它只复制第一个文件 但是,当我直接运行alias命令时,它会复制两个文件。像这样: scp tarun@server1.com:/path_to_folder/{temp1,temp2} ./ && scp {temp1,temp2} tar

我想将多个文件从一台服务器复制到另一台服务器,我必须使用scp从服务器复制到本地,然后从本地复制到服务器

我使用

它适用于这样的单个文件

copy_文件temp1

但当我试图复制多个文件时,如图所示

copy_文件{temp1,temp2}

它只复制第一个文件

但是,当我直接运行alias命令时,它会复制两个文件。像这样:

scp tarun@server1.com:/path_to_folder/{temp1,temp2} ./ && scp {temp1,temp2} tarun@server2.com:/path_to_folder/

请提供帮助。

以双引号传递函数参数:

copy_file "{temp1,temp2}"
否则,bash将把它们解析为单独的函数输入,
$1
将是temp1,
$2
将是temp2

编辑

第二个scp命令将把“{temp1,temp2}”作为文件名。scp语法需要单独的文件名,因此我们将使用以下函数分隔这些文件名:

scp tarun@server1.com:/path_to_folder/"$1" ./ && tmp="$1" && tmp=${tmp#"{"} && tmp=${tmp%"}"} && IFS=',' && array="$tmp" && scp $array tarun@server2.com:/path_to_folder/

以双引号传递函数参数:

copy_file "{temp1,temp2}"
否则,bash将把它们解析为单独的函数输入,
$1
将是temp1,
$2
将是temp2

编辑

第二个scp命令将把“{temp1,temp2}”作为文件名。scp语法需要单独的文件名,因此我们将使用以下函数分隔这些文件名:

scp tarun@server1.com:/path_to_folder/"$1" ./ && tmp="$1" && tmp=${tmp#"{"} && tmp=${tmp%"}"} && IFS=',' && array="$tmp" && scp $array tarun@server2.com:/path_to_folder/

您可以使用
$@
对文件进行迭代,这表示输入参数的数量:

alias copy_file='function_copy(){用于“$@”中的文件;执行scptarun@server1.com:/path_to_folder/“$file”。/&&scp“$file”tarun@server2.com:/path_to_folder/;done;}_复制“

这样,您的别名就可以处理未定义数量的文件


但是,这将运行多个
scp
命令,而不是单个命令。

您可以使用
$@
对文件进行迭代,这表示输入参数的数量:

alias copy_file='function_copy(){用于“$@”中的文件;执行scptarun@server1.com:/path_to_folder/“$file”。/&&scp“$file”tarun@server2.com:/path_to_folder/;done;}_复制“

这样,您的别名就可以处理未定义数量的文件



但是,这将运行多个
scp
命令,而不是单个命令。

在发送
{temp1,temp2}
时,
temp2
作为第二个参数处理,
$2
@samthegolden感谢您提供的信息,但我没有固定数量的文件copy@tarunjain:您的帖子标题令人困惑。您是在寻找别名还是函数?没有别名函数。您发布的只是一个别名,当执行时,它会创建一个函数并在以后调用它(这是一个有点奇怪的别名用法)。是的,所以我想要一个bash函数别名以方便使用,因为我必须时不时地将一些文件从一台服务器复制到另一台服务器。。。请建议对此问题的替代解决方案,或者如果令人困惑,请建议另一个标题。@tarunjain检查我下面的答案。发送
{temp1,temp2}
时,
temp2
作为第二个参数处理,
$2
@samthegolden感谢您提供的信息,但我没有固定数量的文件要保存copy@tarunjain:您的帖子标题令人困惑。您是在寻找别名还是函数?没有别名函数。您发布的只是一个别名,当执行时,它会创建一个函数并在以后调用它(这是一个有点奇怪的别名用法)。是的,所以我想要一个bash函数别名以方便使用,因为我必须时不时地将一些文件从一台服务器复制到另一台服务器。。。请建议对此问题的替代解决方案,或者如果令人困惑,请建议不同的标题。@tarunjain检查我下面的答案。谢谢@mjrezaee,它在本地复制了这两个文件,但上面写着{temp1,temp2}:在再次将其复制到服务器时,没有这样的文件或目录。如果有帮助的话,对于所有变量,RE是
$@
变量,但我无法回避这个问题。@tarunjain我编辑了我的答案,以使用一个线性函数和最少的scp命令使用,我希望这能起作用。您能解释一下您是如何处理alias函数中传递的所有参数的吗?@tarunjain通过
scp
复制多个文件可以通过使用空格分隔的文件名来完成,如
scp temp1 temp2tarun@server2.com:/path_to_folder/
。因此,我从输入参数字符串(变成
temp1,temp2
)中删除了
{'和
}',然后我将这个新字符串拆分成
分隔符成一个数组(变成
[temp1 temp2]
),最后的别名将是:
别名copy\u file='function\u copy(){scptarun@server1.com:/path_to_folder/“$1”。/&&tmp=“$1”&&tmp=${tmp#”{}&&tmp=${tmp%“}”}&&IFS=','&&array=“$tmp”&&scp$arraytarun@server2.com:/path_to_folder/;}_复制“
谢谢@mjrezaee,它在本地复制了这两个文件,但上面写着{temp1,temp2}:在再次将其复制到服务器时,没有这样的文件或目录。如果可能的话,所有变量都是
$@
变量,但我无法回避这个问题。@tarunjain我编辑了我的答案,以使用一个线性函数和最少的scp命令使用,我希望这能起作用。您能解释一下您是如何处理alias函数中传递的所有参数的吗?@tarunjain通过
scp
复制多个文件可以通过使用空格分隔的文件名来完成,如
scp temp1 temp2tarun@server2.com:/path_to_folder/
。因此,我从输入参数字符串(变成
temp1,temp2
)中删除了
{'和
}',然后我将这个新字符串拆分成
分隔符成一个数组(变成
[temp1 temp2]
),最后的别名将是:
别名copy\u file='function\u copy(){scptarun@server1.com:/path_to_folder/“$1”。/&&tmp=“$1”&&tmp=${tmp#”{}&&tmp=${tmp%“}”}&&IFS=','&&array=“$tmp”&&scp$arraytarun@server2.com:/path_to_folder/;}_复制“
谢谢,成功了!现在将使用此语法,但为什么其他语法不起作用??有str吗