bash - 使用通配符并循环从 sftp 服务器下载文件
问题描述
我正在尝试从 sftp 服务器下载一堆文件。服务器的组织结构如下:每年有一个文件夹,每年有一个文件夹,每天有一个文件夹。每天,.nc
我要下载 8 个以结尾的文件。文件本身的名称太疯狂而无法跟踪。我尝试了几种不同的方法,但未能成功给出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()
前导零来格式化文件名。
该sftp
命令需要在循环内。
后面不能有空格today=
。
cd ..
在更改为绝对路径名之前不需要。
for i in {1..366}
do
today=$(printf "%03d/*.nc" $i)
sshpass -p $(cat ~/Code/sftp_passwd.txt) sftp cgerlein@cygnss-sftp-1.engin.umich.edu <<EOF
cd /data/cygnss/products/CDR/l1/2019/
get $today /scratch/myfolder/
quit
EOF
done
顺便说一句,您可以使用 进行通配符下载curl
,请参阅使用 cURL 下载目录中的所有文件
推荐阅读
- ansible - 是否可以引用作为“项目”传递的变量并在循环通过 jinja 模板时使用它们的元素?
- wifi - 构建 AOSP 时提供预先保存的 wifi SSID 和密码
- python - 我正在尝试创建一个烧瓶应用程序,该应用程序可以从 heroku 上的 Internet 下载文件。但我不知道文件存储在哪里
- ios - iOS swift Codable 不能与 Alamofire 一起使用 JSON 嵌套数据?
- android - 摇篮 | publishToMavenLocal | 如何排除发布相关任务
- python - Scrapy,未调用客户方法
- python - 使用带有 sqlalchemy 的循环连接多个表
- graph - 在一张图中绘制不同回归的边际效应
- python - 在任何键盘输入某个按键之前,如何禁用所有键盘和鼠标(除了一个)?
- linux - 有没有办法在 Jenkins 中针对 RDS (Oracle) 运行 SQL 查询而不使用 SQL Plus Script Runner Plugin