2017-07-03 66 views
1

我必须通过shell脚本使用命令行将一些XML文件导入到存在数据库。有一些文件已经存在,我不想覆盖这些文件。是否有命令行参数(或其他解决方案)使存在跳过并报告现有文件?我试过浏览官方文档,但我没有找到类似的东西。存在数据库从命令行导入文件

+0

哪个版本的eXist?你目前使用什么方法在shell脚本中上传文件? – joewiz

+0

我使用最新的存在版本。用于导入的命令是bin/client.sh -m/db/my/collection -p /path/to/file.xml –

回答

1

你说的对,eXist的命令行客户端不提供警告/禁止覆盖资源的功能。 (请参阅客户端的文档http://exist-db.org/exist/apps/doc/java-admin-client.xml#command-line。)

避免覆盖目标的最短路径是使用WebDAV客户端,该客户端在覆盖时会发出警告并为您提供处理此方案的选项。例如,我知道当一个资源/集合存在时,Transmit和oXygen XML Editor会提醒您,这些资源/集合将被覆盖。 (在幕后,他们获取给定目录中资源的列表,然后当你试图在PUT中警告你,如果这个名字的资源在列表中。)

如果命令行是必须的,那么你在继续之前需要某种方式来列出远程集合或查询它是否存在资源。例如,如果您保存此查询到“check.xq”,那么你可以运行它bin/client.sh -F check.xq

doc-available("/db/my/collection/file.xml") 
(: or for binary docs: 
     util:binary-doc-available("/db/my/collection/file.txt") 
    or either XML documents or binary resources: 
     some $resource in xmldb:get-child-resources("/db/my/collection") satisfies $resource eq "file.xml" 
:) 

存在,则也会支持Apache Ant的(见http://exist-db.org/exist/apps/doc/ant-tasks.xml)。虽然xdb:store没有控制覆盖的标志,但您可以在使用xdb:exist进行存储之前先编写一个检查文件是否存在的ant脚本 - 报告现有文件和跳过。关于ant选项的好处是您可以将参数作为命令行参数传递给它(例如ant upload-file -Ddir=/path/to -Dfile=file.xml -Dcollection=/db/my/collection),并且您可以将参数(如服务器URL和凭证)存储在build.properties文件中。我没有准备好完整的示例,但如果您有兴趣寻求ant选项,请尝试一下,如果遇到任何问题,请在评论中告诉我。

+0

感谢您的帮助。我可能会使用xquery,但我希望存在clent有我需要的选项。再次感谢你。 –