使用 * 通配符时调用 scp 的函数会出现意外行为

问题描述 投票:0回答:1

我有一个 shell 函数来帮助我将 scp 文件传入和传出服务器。两台服务器都在 Ubuntu 22.04 上运行 bash。让我们调用服务器

comp2
并假设其 IP 地址是 192.168.1.2

在我的服务器上的

/home/.bashrc
文件中,我将此作为我的别名:

tocomp2() {
scp "$1" [email protected]:"$2"
}
fromcomp2() {
scp [email protected]:"$1" "$2"
}

假设我的工作目录中有三个文件

foo1
foo2
foo3
,以及
bar
的主目录中的三个文件
bar2
bar3
comp2
。当我使用通配符移动这些文件时,会发生奇怪的事情。

tocomp2 foo* /home/
仅限转账
foo1

tocomp2 foo\* /home/
未找到任何文件。

fromcomp2 bar* ./
fromcomp2 bar\* ./
传输所有三个
bar
文件

编辑:更好的问题是,我怎样才能使

tocomp2
表现得像
fromcomp2
,其中通配符实际上选择所有
foo
文件?

bash scp
1个回答
1
投票

实际上

tocomp2 foo* /home/
扩展为
tocomp2 foo1 foo2 foo3 /home/
,复制
foo1
但将其重命名为
foo2
,并忽略其余参数。

编写 first 参数特殊的函数更简单;与

tocomp3(){
    local dest=$1
    shift
    scp "$@" "[email protected]:$dest"
}

您可以使用

tocomp3 . foo*
获得您想要的内容,其中
.
是目标的目标目录。

© www.soinside.com 2019 - 2024. All rights reserved.