回答:
scp
リモートマシン*
がグロブとして処理されるのを避けるために、リテラルエスケープを渡す必要があります(二重引用符で囲まれていることに注意してください)。
scp 'SERVERNAME:/DIR/\*' .
touch /tmp/abcd.1234; scp 'localhost:/tmp/abcd.\*' ./
:scp: /tmp/abcd.*: No such file or directory
pscp
リモートグロブを許可するようにクライアント側で。
クリスの答えは私を正しい道に導いたが、私はパトリックのアドバイスが正しいことがわかった。引用符を使用すると、アスタリスクの前にバックスラッシュは不要です。
scp 'SERVERNAME:/tmp/file_num\*' .
scp:/tmp/file_num*.csv:そのようなファイルまたはディレクトリはありません
scp 'SERVERNAME:/tmp/file_num*' .
judges_for_job_171642.csv 100%32KB 32.0KB / s 00:00
decisions_for_job_172394.csv 100%548KB 182.6KB / s 00:03
*
する方法に関するものであり、リモートでのみグロブする方法に関するものではありません。
注:以下で提供されるソリューションはテスト済みであり、正しく機能することが確認されています。
グロブするパスの一部にエイリアスを設定している場合、一重引用符は変数の展開を中断します。
ここで使用するスクリプトですDOUBLE展開されたファイル名のユースケースのための引用符のコマンド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