"updatedb"(위치) 검색 경로에 특정 디렉터리를 어떻게 추가합니까?

"updatedb"(위치) 검색 경로에 특정 디렉터리를 어떻게 추가합니까?

/media/win_c저는 듀얼 부팅 상자 에 설치된 Windows 파티션의 디렉터리에 디지털 음악과 디지털 사진을 보관합니다 . locate데이터베이스 에 이러한 디렉터리(단, 이러한 디렉터리만)를 포함하고 싶습니다 . 그러나 내가 아는 한 updatedb.conf디렉토리를 추가하는 것이 아니라 제외하는 옵션만 있습니다. 물론, 여러 개의 하위 디렉터리( , ...)를 /media제거 하고 추가할 수 있지만 이는 매우 서투른 접근 방식처럼 보입니다. 확실히 더 우아한 솔루션이 있을까요?PRUNEPATHS/media/win_c/Drivers/media/win_c/ProgramData

(색인된 Linux 파티션에서 Windows 디렉터리로의 소프트 링크를 만들려고 시도했지만 도움이 되지 않은 것 같습니다.)

답변1

에는 그러한 옵션이 없습니다 updatedb.conf. updatedb수동 전달 옵션을 예약해야 합니다 .

그리고GNU findutils에서 업데이트된 데이터베이스, 통과 --localpaths.

updatedb --localpaths '/ /media/win_c/somewhere/Music /media/win_c/somewhere/Photos'

그리고mlocate에서 데이터베이스 업데이트, 여러 루트를 지정하거나 정리에서 디렉터리를 제외하는 방법이 없는 것 같아서 디렉터리당 하나의 데이터베이스만 가질 수 있다고 생각합니다. 환경 변수를 LOCATE_PATH데이터베이스 목록으로 설정합니다.

updatedb --output ~/.media.mlocate.db --database-root /media/win_c/somewhere --prunepaths '/media/win_c/somewhere/Videos'

export LOCATE_PATH="$LOCATE_PATH:$HOME/.media.mlocate.db"

답변2

--database-root아무것도 삭제하지 않고 이 옵션을 사용하여 "mlocate"를 통해 구현됩니다 . 업데이트된b(8) 매뉴얼 페이지에서:

-U, --database-root PATH
    Store only results of scanning the file system subtree rooted at
    PATH  to  the  generated  database.   The  whole  file system is
    scanned by default.

그러나 별도의 출력 파일( )을 사용할 수도 있습니다 --output. 두 개의 데이터베이스를 병합할 수 있는지 잘 모르겠습니다(시도해 볼 수 있음).

다른 구현에도 비슷한 옵션이 있을 수 있습니다.

답변3

이제 이해가 되네요.. 아니면? mlocate를 사용하는 것은 그리 쉽지 않지만 mlocate의 모든 -U, --database-root 경로에 대해 완벽하게 작동하므로 새 데이터베이스가 필요한 것 같습니다! ?

사용법: <script>"용어"

#!/bin/dash


dbfile="$HOME/.recordings.locate.db";
daysToUpdate=7;
create=0;

# list of paths
paths="/master/media/music /media/recordings";

# list of terms
termA=$( echo "$1" | sed 's/ /\\ /g' );
termB=$( echo "$1" | sed 's/ /_/g' );

# realtime scan:
#find $paths -iname "*$termA*" -o -iname "*$termB*"


# -- 

if [ ! -f "$dbfile" ]; then
    create=1;
fi


if [ "$create" -ne 1 ] && [ $(find "$dbfile" -mtime +$daysToUpdate -print) ];
then
    echo "File $dbfile exists and is older than $daysToUpdate days"
    create=1;
fi


if [ "$create" = "1" ] ; then
    echo "Update custom dbs please wait...";
    touch "$dbfile"; # mark for inside actions
    cnt=0;
    for path in $paths
    do
        echo "scan: $path to $dbfile.$cnt";
        updatedb -l 0 -U $path -o "$dbfile.$cnt";
        cnt=$(expr $cnt + 1);
    done
fi


cnt=0;
for path in $paths
do
    echo "scan: $path of cache $dbfile.$cnt";
    locate -d "$dbfile.$cnt" $termA
    locate -d "$dbfile.$cnt" $termB
    cnt=$(expr $cnt + 1);
done

2023: Locate는 이제 데비안 기본값이며 더 이상 작동하지 않습니다!

관련 정보