使用curl通过FTP获取目录文件并按修改日期倒序排列的问题
问题:从FTP拉取目录列表并按修改日期倒序保存
我通过以下命令从FTP服务器拉取目录列表到本地文件:
curl --verbose --ftp-ssl --user 'username:password' ftp://abc.com:001//this/is/stackoverflow/ > /home/dir1/dir2/dir3
执行more dir3后,理想输出如下:
drwxrwxrwx 1 owner group 0 Jan 1 2021 00:00 filename1 drwxrwxrwx 1 owner group 0 Jan 1 2022 04:30 filename2 drwxrwxrwx 1 owner group 0 Jan 1 2021 06:30 filename3 -rwxrwxrwx 1 owner group 1122 Jan 1 2022 08:30 filename4 -rwxrwxrwx 1 owner group 2233 Jan 1 2022 10:30 filename5 -rwxrwxrwx 1 owner group 3344 Jan 1 2023 11:30 filename6
我需要让保存到dir3的文件列表按修改日期倒序排列,但之前尝试的命令都无效(曾尝试用-k6M参数针对月份列排序):
curl --verbose --ftp-ssl--user 'username:password' ftp://abc.com:001//this/is/stackoverflow/ > /home/dir1/dir2/dir3 | sort -n -t- -k6M | tail -1curl --verbose --ftp-ssl--user 'username:password' ftp://abc.com:001//this/is/stackoverflow/ > /home/dir1/dir2/dir3 | sort -n -t- -k6Mcurl --verbose --ftp-ssl--user 'username:password' ftp://abc.com:001//this/is/stackoverflow/ > /home/dir1/dir2/dir3 | sort -k6M | tail -1
需求是在执行curl命令时,直接把按修改日期倒序排列的列表保存到本地文件中。
解决方案
你的核心问题是重定向顺序错误:先把curl输出写入文件,再用管道传数据给sort,此时sort接收不到任何内容。正确逻辑是先让curl输出经过sort处理,再写入文件。另外,sort的参数需要针对日期的多列做组合排序,才能保证顺序准确。
最终可用命令如下:
curl --ftp-ssl --user 'username:password' ftp://abc.com:001//this/is/stackoverflow/ | sort -k7,7nr -k6,6M -k5,5nr -k8,8r > /home/dir1/dir2/dir3
参数说明:
-k7,7nr:按第7列(年份)数字倒序排序-k6,6M:按第6列(月份缩写)识别排序-k5,5nr:按第5列(日期)数字倒序排序-k8,8r:按第8列(时间)倒序排序- 管道
|先传递curl的目录列表给sort处理,再通过>写入目标文件
如果需要保留curl的调试输出(--verbose参数),需把调试信息重定向到/dev/null避免干扰列表内容:
curl --verbose --ftp-ssl --user 'username:password' ftp://abc.com:001//this/is/stackoverflow/ 2>/dev/null | sort -k7,7nr -k6,6M -k5,5nr -k8,8r > /home/dir1/dir2/dir3
执行后,dir3内的内容会按修改日期从新到旧排列,比如示例中的filename6(2023年)会排在最前,filename1(2021年)排在最后。
内容的提问来源于stack exchange,提问作者Kumar A
相关产品推荐
相关产品推荐

