6
sh递归副本(cp -r)-如何排除子文件夹
我需要运行使用远程脚本ssh通过Ruby(网/ SSH)递归复制文件夹,并排除子文件夹。我正在寻找最快的方法,所以这样做rsync不是很好。另外,我了解ssh使用sh而不是bash。 在bash中,我这样做: cp -r srcdir/!(subdir) dstdir 而且效果很好。但是,当我通过启动脚本时ssh收到错误消息 sh: 1: Syntax error: "(" unexpected 因为它正在使用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 编辑2: 确定。因此,bash可用,这似乎不是问题。我已验证ssh实际上正在使用bash。这个问题似乎与括号或感叹号的转义有关。我试图从外壳(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 /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!\(constant\) /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; ln -s /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/constant /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N/constant' 这样我会收到另一个错误 cp: …