我有一个 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
文件?
实际上
tocomp2 foo* /home/
扩展为 tocomp2 foo1 foo2 foo3 /home/
,复制 foo1
但将其重命名为 foo2
,并忽略其余参数。
编写 first 参数特殊的函数更简单;与
tocomp3(){
local dest=$1
shift
scp "$@" "[email protected]:$dest"
}
您可以使用
tocomp3 . foo*
获得您想要的内容,其中 .
是目标的目标目录。