업데이트됨에는 심볼릭 링크가 가리키는 경로가 포함되어 있습니다.

업데이트됨에는 심볼릭 링크가 가리키는 경로가 포함되어 있습니다.

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전역 변수를 선언하십시오 . 그런 다음 함수의 처음 두 테스트 후에 다음 코드를 추가합니다.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각 기능 앞에 하나를 추가합니다 explored.pop_back();.

코드를 비슷하게 수정하면 필요에 따라 특정 디렉터리 내에서만 심볼릭 링크를 따르거나 데이터베이스의 특정 디렉터리를 완전히 제외할 수 있습니다. 결과는 매우 유용합니다.클릭 가능.

관련 정보