Answers:
您需要传递一个文字转义符,scp
以避免将远程计算机*
视为glob(注意,它被双重引用):
scp 'SERVERNAME:/DIR/\*' .
touch /tmp/abcd.1234; scp 'localhost:/tmp/abcd.\*' ./
:scp: /tmp/abcd.*: No such file or directory
pscp
在客户端允许远程glob。
我发现Patrick的建议是正确的,尽管Chris的回答使我步入正轨。使用引号,然后在星号前不需要反斜杠。
scp 'SERVERNAME:/tmp/file_num\*' .
scp:/tmp/file_num*.csv:没有这样的文件或目录
scp 'SERVERNAME:/tmp/file_num*' .
判决书_for_job_171642.csv 100%32KB 32.0KB / s 00:00
判决书_for_job_172_cs.cv 100%548KB 182.6KB / s 00:03
*
),而不是仅如何远程控制。
注意:下面提供的解决方案经过测试,已知可以正常工作。
如果您已别名遍历了路径的一部分,则单引号将破坏变量扩展。
这是一个脚本,该脚本使用别名加上变量的路径来对全局文件名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,使用双引号的示例,其中您要遍历的路径中的变量需要允许扩展。高温超导