Bash脚本下载标识符列表并保存到文件

时间:2019-07-11 05:49:45

标签: bash

我想编写一个bash脚本来下载标识符列表并保存到文件中。 我在文件metadata.xml里面

<ListIdentifiers>
    <header>
      <identifier>demo:HASH01d242dc3e08e1fdcf7343bb</identifier>
      <datestamp>2009-03-01</datestamp>
      <setSpec>demo</setSpec>
    </header>
    <header>
      <identifier>demo:HASHa84b11354e321524fd5ef6</identifier>
      <datestamp>2009-03-01</datestamp>
      <setSpec>demo</setSpec>
    </header>
    <header>
      <identifier>demo:HASHa891721179ce8bc74b905a</identifier>
      <datestamp>2009-03-01</datestamp>
      <setSpec>demo</setSpec>
    </header>
 </ListIdentifiers>

在我的bash脚本中,我有找到所有标识符并将它们存储在数组中的代码。然后,我想遍历所有标识符并下载每个标识符的元数据记录,并将其存储在单独的目录中。 元数据的格式为

demo:HASH01d242dc3e08e1fdcf7343bb
demo:HASHa84b11354e321524fd5ef6

我想拆分元数据,并使用例如HASH01d242dc3e08e1fdcf7343bb.xml命名已下载的元数据文件

我的代码下载了元数据,但是它没有正确命名文件,而不是命名文件,例如HASH01d242dc3e08e1fdcf7343bb.xml,将其命名为oaiserver?verb = GetRecord&identifier = demo:HASH01d242dc3e08e1fdcf7343bb&metadataPrefix = oai_dc.xml。我想要的是。

如何修复我的代码,以便所有下载的元数据都具有类似于其标识符的文件名,例如HASH01d242dc3e08e1fdcf7343bb.xml,HASHa84b11354e321524fd5ef6.xml等。

myarray=($(grep identifier metadata.xml|tr -d ' ' | sed 's/<[^>]*>//g' ))
for i in "${myarray[@]}"; do wget -P test/ "http://www.nzdl.org/cgi-bin/oaiserver?verb=GetRecord&identifier="$i"&metadataPrefix=oai_dc"| cut -d":" -f2; done

1 个答案:

答案 0 :(得分:0)

  

如何修复我的代码,以便所有下载的元数据都具有类似于其标识符的文件名

您必须告诉wget不要将输出写入适当的文件中,而是写入标准输出,并将cut的输出重定向到所需文件:

for i in "${myarray[@]}"
do  wget -O - "http://…" |
    cut -d: -f2 >test/$i.xml
done

如果“我想拆分元数据”是指元数据标识符而不是下载的元数据记录,则不需要更改输出,只需更改标识符即可:

for i in "${myarray[@]}"
do  wget -O test/${i/*:}.xml "http://…"
done