Glob使用curl遍历一长串文件,并将每个文件写入具有匹配文件名的唯一新文件



我正在使用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..?}

我知道我不能使用简单的globing,如:

curl ftp/site/file* > file*

——这只给我ambiguous redirect。我想知道是否有人知道一个聪明的解决方案,我可以glob文件名,将其保存为字符串,然后将输出写入文件名,而不会得到花哨…我知道我可能会去写一个python脚本来更系统地做到这一点,但似乎可能有一个快速的bash解决方案,我没有想到…

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

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

-O选项将以与目录相同的名称保存文件:-)

最新更新