我需要使用ssh
via Ruby
( net/ssh )运行远程脚本来递归复制文件夹并排除子文件夹。我正在寻找最快的方法,所以rsync
不好。另外,我知道ssh
使用sh
而不是bash
.
在 bash 我做:
cp -r srcdir/!(subdir) dstdir
Run Code Online (Sandbox Code Playgroud)
它工作正常。但是,当我通过启动脚本时ssh
收到错误
sh: 1: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)
因为它正在使用sh
.
我检查了sh
手册页,但没有排除文件的选项。
这是我ssh
使用sh
正确的假设吗?任何替代建议?
编辑 1:
如果它有用,输出sudo cat /etc/shells
如下:
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
Run Code Online (Sandbox Code Playgroud)
编辑2:
好的。所以 bash 它是可用的,这似乎不是问题。我已经验证 ssh 实际上正在使用bash
. 该问题似乎与括号或感叹号的转义有关。我试图从 shell (macos) 运行命令,这是实际的命令:
ssh -i .ssh/key.pem ubuntu@X.X.X.X 'mkdir /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; cp -r …
Run Code Online (Sandbox Code Playgroud)