
私は次のようにupdatebを実行します。updatedb --localpaths="/a /b"
/a
リムーバブルドライブです。/b
ローカルハードドライブです。常にアクセスできるわけではありませんが、特定のファイルがそこにあるかどうかを見つけるために/a
実行したいことがよくあります(最後に実行した時間に基づいて)。locate
updatedb
問題は、updatedb
接続していない状態で実行するとエラーが発生することです。
/usr/bin/find: '/a': No such file or directory
データベースはこれに関する最新情報を取得しますが、既存のデータを/b
削除します。/a
接続していないときに/a
データを保持する方法はありますか?/a
updatedb
私はこれが複数のデータベースで可能になると思います。 1つはfor /a
、1つはforです/b
。その後、スクリプトは/a
挿入するかどうかを決定するときに挿入されたことを確認できますupdatedb
。
ただし、2つのコマンドのマニュアルページでは、私が知っているよりも多くを知っていると仮定しているので(これは何をすべきかFINDOPTIONS
)、この問題に対するより簡単な解決策があることを願っています。
答え1
私はWindows上のLinuxやGNUのバージョンがわかりませんが、あなたが望むことをするlocate
ことができます。より長いバージョンのマニュアルがあります。ここ。
単一のupdatedb --localpaths="/a /b"
コマンドを2つのコマンドに置き換えます。
updatedb --localpaths="/b"
if [ -d "/a" ]; then updatedb --localpaths="/a" --output=/dir/mydb; fi
/dir/mydb
データベースが保存されるファイルのフルパス名はどこにありますか?
ターゲットとして指定するときは、環境変数LOCATE_PATH
をに設定してください/dir/mydb::
。原則として、::
これは標準データベースを使用することを意味する必要があります。
それでも::
機能しない場合は、を実行して標準データベースのファイル名を取得できますupdatedb --help
。たとえば、デフォルト値がと表示されている場合は/usr/local/var/locatedb
これを設定できますLOCATE_PATH=/dir/mydb:/usr/local/var/locatedb
。この-d
オプションを使用して、locate
このデータベースのリストを提供することもできます。