【发布时间】:2023-03-04 18:28:01
【问题描述】:
我正在尝试使用scp 从远程服务器复制多个文件。
我可以为script file_number 的单个参数成功地做到这一点
script 在哪里:
#!/bin/bash
echo Insert your username:
read user
scp $user@server:/path/run$1*.lz4 ./
lz4 -mdv --rm run$1*.lz4
我所有文件的格式为:runXXXXsubY.lz4
这样我可以复制所有具有XXXX==file_number 的文件,但我想传递多个参数,并复制所有这些文件,例如script 1 2 复制所有带有xxxx==1 和XXXX==2 的文件。
我试过了:
scp $user@server:/path/run"$@"*.lz4 ./
但是$@ 会在没有附加*.lz4 的情况下展开
感谢您在正确方向上的任何帮助。
谢谢
【问题讨论】:
-
它充满了危险和引用问题,但你可以这样做
scp $(printf "$user@server:/path/run%s.lz4 " "$@") ./。使用 xargs 会更好。 -
您最好使用一个简单的 for 循环为每个文件调用一次
scp。与多次调用相比,使用多个参数调用scp并没有太多好处。 -
@WilliamPursell
for循环的问题在于它要求输入密码的次数与参数的次数一样多。这是我想避免的。 -
你应该设置你的 ssh 密钥,这样就不需要密码了。
-
如果您需要复制很多个文件,我会看看如何在主模式下运行
ssh,以便每个scp可以重复使用相同的经过身份验证的连接每次传输,而不必为每个文件重新验证。