如何将特定目录添加到“updatedb”(定位)搜索路径?

如何将特定目录添加到“updatedb”(定位)搜索路径?

我将数字音乐和数字照片保存在 Windows 分区的目录中,安装在/media/win_c我的双启动盒上。我想将这些目录(但仅限于这些目录)包含在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

通过“mlocate”实现,使用该--database-root选项,而不删除任何内容。在 updatedb(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 年:plocate 现在是 debians 默认值,这不再有效了!

相关内容