2017-07-03 9 views
1

シェルスクリプトでコマンドラインを使用して、exist-dbにいくつかのxmlファイルをインポートする必要があります。あるファイルがすでに存在していて、それらのファイルを上書きしたくないという機会があります。既存のファイルをスキップして報告するコマンドライン引数(または他の解決策)がありますか?私は公式のドキュメントを閲覧しようとしましたが、類似のものを見つけることができませんでした。exist-dbコマンドラインからファイルをインポートする

+0

どのバージョンのeXistですか?また、シェルスクリプトのファイルをアップロードするために現在どの方法を使用していますか? – 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に必要なオプションがあることを望んでいました。ありがとうございました。 –

関連する問題