/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는 이제 데비안 기본값이며 더 이상 작동하지 않습니다!