パスで*
文字を使用しているときにscpでコピーできないのはなぜですか?
scp SERVERNAME:/DIR/* .
パスに*
を許可するには、SCPにどのような構成が必要ですか?
更新:問題はサーバー側ではありません。 pscpがSCPv1を使用しようとしているため、エラーメッセージが表示されます。
リモートマシンでscp
にリテラルエスケープを渡して、*
をグロブとして処理しないようにする必要があります(二重引用符で囲まれていることに注意してください)。
scp 'SERVERNAME:/DIR/\*' .
私はパトリックのアドバイスが正しいと思いましたが、クリスの答えは私を正しい方向に導きました。引用符を使用すると、アスタリスクの前にバックスラッシュは必要ありません。
scp 'SERVERNAME:/tmp/file_num\*' .
scp:/tmp/file_num*.csv:そのようなファイルまたはディレクトリはありません
scp 'SERVERNAME:/tmp/file_num*' .
judgements_for_job_171642.csv 100%32KB 32.0KB/s 00:00
judgments_for_job_172394.csv 100%548KB 182.6KB/s 00:03
注:以下で提供されるソリューションはテスト済みであり、正しく動作することがわかっています。
Singleグロビングしているパスのエイリアスの部分がある場合、引用符は変数の展開を壊します。
これは、グロブ化されたファイル名のユースケースに[〜#〜] double [〜#〜]引用符を使用するスクリプトですcommand-configure_。tar.gz *変数でエイリアスされたパスを使用:
#!/bin/bash
USEREXECUTINGSCRIPT='admin'
SCRIPTSDIR="myscripts"
SCPUSER='terrencehoulahan'
SCPUSERPASSWD='Change-Me'
SCPHOST='1.2.3.4'
SCPDIRECTORYREMOTE='/Users/terrencehoulahan/Downloads/Ubuntu/18.04'
## Uncomment appropriate below command for your distro to install "sshpass"
#apt-get -y sshpass
#yum -y install sshpass
sshpass -p "$SCPUSERPASSWD" scp -o StrictHostKeyChecking=no $SCPUSER@$SCPHOST:"$SCPDIRECTORYREMOTE/command-configure_*.tar.gz" $(getent passwd|grep ^$(echo $USEREXECUTINGSCRIPT)|cut -d ':' -f6)/$SCRIPTSDIR/
二重引用符を閉じた後、指定されたユーザーのホームディレクトリを/ etc/passwdから抽出するだけで、ローカルディレクトリターゲットが構築されます。
Scpコマンド自体はsshpass
および-o StrictHostKeyChecking=no
で始まり、ユーザーの介入なしにscp
コマンドを完全に自動化します。複雑に見えますが、時々変更されることが予想されるハードコーディングパスよりも優れています。
Anyhoo、二重引用符を使用する例。グロビングしているパスの変数を展開できるようにする必要があります。 HTH
私にとっては、bashとc-Shellでは動作が異なります。なぜc-Shellを使用するのかを尋ねないでください。 bashでは必要ありません ''-c-Shellでは必要です。そのため、Linuxのバージョンによって、グロブの扱いが異なるようです。