繁体   English   中英

如何使用curl和printf打印ftp文件信息

[英]How to print ftp file information using curl and printf

我正在尝试获取文件信息以进行批量下载,并且无法使用管道连接到printf。

测试用例

$ curl -sI ftp://ftp.ncbi.nlm.nih.gov/pub/README.ftp
Last-Modified: Wed, 12 Aug 2015 15:47:26 GMT
Content-Length: 2037
Accept-ranges: bytes

一个适合文件大小的简单grep剪切

$ curl -sI ftp://ftp.ncbi.nlm.nih.gov/pub/README.ftp | grep Content-Length | cut -d ' ' -f 2
2037

Grep剪切正在处理文件日期和时间

$ curl -sI ftp://ftp.ncbi.nlm.nih.gov/pub/README.ftp | grep Last-Modified | cut -d ' ' -f 3,4,5,6
12 Aug 2015 15:47:26

但是,将grep扩展到cut到printf不适用于服务器文件日期和时间,printf是否返回本地系统日期和时间?

$ curl -sI ftp://ftp.ncbi.nlm.nih.gov/pub/README.ftp | grep Last-Modified | cut -d ' ' -f 3,4,5,6 | printf '%(%Y-%m-%d %H:%M:%S)T '

是本地日期和时间,而不是远程日期和时间?

2019-08-24 20:32:53

文件大小和日期将在脚本中用于批量下载和自定义日志记录。 这些东西...

infilesize=$(curl -sI $inpath/$infile | grep Content-Length | cut -d ' ' -f 2)
infiledate=$(curl -sI $inpath/$infile | grep Last-Modified | cut -d ' ' -f 3,4,5,6 | printf '%(%Y-%m-%d %H:%M:%S)T ' )
printf $infilesize 2>&1 | tee -a $logpath/$logfile
printf $infiledate 2>&1 | tee -a $logpath/$logfile

我的第一个障碍是修复printf的管道语法?

对sed和awk的其他管道方法开放。

相对缺乏bash的经验,因此希望了解详细的代码建议和/或优美的代码和说明,并希望学习良好的技术。

提前致谢。

更新

date子shell方法适用于远程服务器文件的日期和时间。

但是,我现在在printf上遇到问题,无法在一行上输出多个变量。 我环顾四周,但难以理解printf的参数处理方式并收到意外结果。

printf $infilename $infilesize $infiledate 2>&1 | tee -a $outpath/$logfile.txt

这是一个单独的问题, 我该如何使用printf打印多个变量

您甚至不需要printf ,只需使用date的子shell显示cut日期信息:

curl -sI ftp://ftp.ncbi.nlm.nih.gov/pub/README.ftp | grep Last-Modified | \
date -d "$(cut -d ' ' -f 3,4,5,6)" "+%Y-%m-%d %H:%M:%ST"

结果:

2015-08-12 15:47:26T

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM