小编Roj*_*ojj的帖子

sh 递归复制 (cp -r) - 如何排除子文件夹

我需要使用sshvia 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)

shell ssh cp

8
推荐指数
3
解决办法
3937
查看次数

标签 统计

cp ×1

shell ×1

ssh ×1