更新には、シンボリックリンクが指すパスが含まれています。

更新には、シンボリックリンクが指すパスが含まれています。

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();

コードを同様に変更すると、必要に応じて特定のディレクトリ内でのみシンボリックリンクをたどったり、データベース内の特定のディレクトリを完全に除外したりできます。結果は非常に便利です。クリック可能

おすすめ記事