我将数字音乐和数字照片保存在 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 默认值,这不再有效了!