用于使用SSH复制多个文件的Bash别名函数
我想将多个文件从一台服务器复制到另一台服务器,我必须使用scp从服务器复制到本地,然后从本地复制到服务器 我使用 它适用于这样的单个文件用于使用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
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吗