【发布时间】:2019-10-11 15:51:35
【问题描述】:
我正在尝试从 sftp 服务器下载一堆文件。服务器的组织结构如下:每年有一个文件夹,每年有一个文件夹,每天有一个文件夹。每天,我要下载 8 个以.nc 结尾的文件。文件本身的名称太疯狂而无法跟踪。我尝试了几种不同的方法,但未能成功地为get 提供获取文件的正确说明。
我当前的版本是在连接到 sftp 之前有一个循环,这样我就可以写下名称,然后连接到 sftp 并下载该文件:
for i in `seq 1 1 366`;
do
if [ $i -lt 10 ]; then
today='00$i/*.nc'
elif [ $i -ge 10 ] && [ $i -lt 100 ]; then
today= '0$i/*.nc'
elif [ $i -ge 100 ]; then
today= '$i/*.nc'
fi
done
sshpass -p $(cat ~/Code/sftp_passwd.txt) sftp cgerlein@cygnss-sftp-1.engin.umich.edu <<EOF
cd ..
cd ..
cd /data/cygnss/products/CDR/l1/2019/
get $today /scratch/myfolder/
quit
EOF
我不认为get 喜欢其中的通配符。这甚至可能不是最好的方法。有什么建议么?谢谢!
【问题讨论】:
-
变量不在单引号内展开,只有双引号。
-
顺便说一句,您可以使用
$(printf '%03d' $i)来获取带有前导零的数字,而不是if语句。 -
我认为你需要使用
mget命令来获取多个带有通配符的文件。 -
@Barmar 谢谢,双引号 +
mget有效,但现在它从第一个文件夹下载所有文件,然后停止。我尝试将sshpass[ ...]quit EOF放入do循环中,但这不起作用。 -
啊,我认为这只是表格有些奇怪,但现在似乎有效。谢谢!