【问题标题】:Glob through a long list of files with curl and writing each to a unique, new file with a matching filename使用 curl 遍历一长串文件并将每个文件写入具有匹配文件名的唯一新文件
【发布时间】:2023-03-04 06:28:01
【问题描述】:

我正在使用curl 从一个ftp 站点下载几组大型文件,并将它们写入同名的新文件中。我想使用这样的命令:

curl ftp/site/filename > filename

以下是 ftp 站点的一些示例文件:

File:Compara.6_primates_EPO.chr10_1.emf.gz 30909 KB     8/3/10  12:00:00 AM
File:Compara.6_primates_EPO.chr10_2.emf.gz 13110 KB     8/3/10  12:00:00 AM
File:Compara.6_primates_EPO.chr10_3.emf.gz 24948 KB     8/3/10  12:00:00 AM
File:Compara.6_primates_EPO.chr10_4.emf.gz 45155 KB     8/3/10  12:00:00 AM
File:Compara.6_primates_EPO.chr10_5.emf.gz 17236 KB     8/3/10  12:00:00 AM
File:Compara.6_primates_EPO.chr11_1.emf.gz 37593 KB     8/3/10  12:00:00 AM
...
500 files later
....
File:Compara.6_primates_EPO.other_9.emf.gz 8980 KB  8/3/10  12:00:00 AM

这些文件有很多,我将浏览许多长长的列表。我可以使用 一些 数字模式

for x in {1..N}; do curl ftp/site/file${x} > file${x}

但也有不可预知的模式,例如不同文件的二级数字索引不同。这里是{1..5}

Compara.6_primates_EPO.chr10_{1..5}

对于下一个文件,我可能会有类似

的内容

Compara.6_primates_EPO.chr11_{1..7}

还有一些像最后一个一样的古怪:

Compara.6_primates_EPO.other_{1..?}

我知道我不能像这样使用简单的通配符:

curl ftp/site/file* > file*

-- 这只是给了我ambiguous redirect。我想知道是否有人知道一个聪明的解决方案,我可以将文件名全局化,将其保存为字符串,然后将输出写入文件名,而不会花哨......我知道我可能去编写一个 python 脚本来更系统地执行此操作,但似乎可能有一个我没有想到的快速bash 解决方案......

【问题讨论】:

  • 你看过man page for curl吗? URL 的示例似乎表明您不需要任何超出 ftp URL 范围的内容。
  • @EtanReisner 嘿,Etan,谢谢。我的脸现在有点红,我应该早点查看 curl 文档 ;-) curl -O ftp/* 工作正常...

标签: bash curl ftp glob


【解决方案1】:

毕竟这个问题的答案很简单:

curl -O ftp/path/to/site/*glob_pattern*

-O 选项将使用在目录中给出的相同名称保存文件:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多