我想编写一个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
答案 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