(net / ssh)を使用しssh
てリモートスクリプトを実行し、フォルダーを再帰的にコピーしてサブフォルダーを除外する必要があります。私はそれを行う最速の方法を探しているので、良くありません。また、ではなくを使用していることも理解しています。Ruby
rsync
ssh
sh
bash
バッシュで私はします:
cp -r srcdir/!(subdir) dstdir
そしてそれはうまくいきます。しかし、スクリプトを起動ssh
するとエラーが表示されます
sh: 1: Syntax error: "(" unexpected
使っているからsh
。
sh
manページを確認しましたが、ファイルを除外するオプションはありません。
それは正しい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:
OK。したがって、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: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
編集3:
コメントに基づいて、コマンドを追加して変更しましたextglob
私が使うなら
ssh -i .ssh/key.pem ubuntu@X.X.X.X 'shopt -s extglob; 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: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
かっこをエスケープしないと、
bash: -c: line 0: syntax error near unexpected token `('
ssh
(まあsshd
)リモートユーザーのログインシェルを使用します。何でもかまいません。