mlocate
特定のフォルダの内容を使用してデータベースを作成しました。updatebd
データベースにシンボリックリンクが指すパスが含まれていないことがわかりました。
データベースのシンボリックリンクが指すパスをどのように含めますか?
驚くべきことに:モバイルポジショニング-L
ファイルの存在を--follow
確認するときにデフォルトのオプションがあるか、後続のシンボリックリンクに従います(デフォルト)。
その目的は何ですかデータベースの更新シンボリックリンクは含まれていません!
引用:
答え1
使用この実装updatebを含むplocateを使用している場合は、シンボリックリンクを追跡するカスタムバージョンを構築できます。 mlocateの質問にも答えがあるかどうかはわかりませんが、私はplocateだけを使います。
ファイルシステムでループが発生しないと確信している場合は、コードを置き換えます。
e.is_directory = (de->d_type == DT_DIR);
渡す
e.is_directory = (de->d_type == DT_DIR) || (de->d_type == DT_LNK); // or even just true
ファイルにupdatedb.cpp
。
ループがある場合、回避策は次のとおりです(おそらくそれほど効率的ではないかもしれません)。常に関数の前にupdatedb.cpp
グローバル変数を宣言してください。次に、関数の最初の2つのテストの後に次のコードを追加します。vector<char*> explored;
int scan(...)
scan
char buf[PATH_MAX];
realpath(path.c_str(),buf);
for (auto &e : explored)
if (strcmp(e,buf) == 0)
return 0;
explored.push_back(buf);
return
各機能の前に1つを追加しますexplored.pop_back();
。
コードを同様に変更すると、必要に応じて特定のディレクトリ内でのみシンボリックリンクをたどったり、データベース内の特定のディレクトリを完全に除外したりできます。結果は非常に便利です。クリック可能。