web-dev-qa-db-ja.com

特定のディレクトリを「updatedb」(検索)検索パスに追加する方法は?

私のデジタルミュージックとデジタル写真は、デュアルブートボックスの/media/win_cにマウントされたWindowsパーティションのディレクトリに保存しています。 locateデータベースにこれらのディレクトリ(ただし、それらのディレクトリのみ)を含めたいと思います。ただし、私が知る限り、updatedb.confはディレクトリを除外するオプションのみを提供し、追加はできません。もちろん、/mediaPRUNEPATHSから削除してから、一連のサブディレクトリ(/media/win_c/Drivers/media/win_c/ProgramData...)を追加することもできますが、これは非常に不格好な方法のようですそれを行うことのより確かにもっとエレガントな解決策がありますか?

(インデックス付けされたLinuxパーティションからWindowsディレクトリへのソフトリンクを作成することを試みましたが、それは役に立たないようです。)

7
ionh

updatedb.confにはそのためのオプションはありません。オプションをupdatedbに手動で渡すように調整する必要があります。

pdatedb from GNU findutils を使用して、--localpathsを渡します。

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

mldbateからのupdatedb では、複数のルートを指定したり、ディレクトリをプルーニングから除外したりする方法がないので、ディレクトリごとに1つのデータベースで立ち往生していると思います。環境変数LOCATE_PATHをデータベースのリストに設定します。

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

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

「mlocate」実装では、--database-rootオプション、何も剪定しない。 updatedb(8)のmanページで:

-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
vinc17

gotscha now .. or? mlocateはそれほど簡単ではありませんが、これはmlocateの-U、--database-root PATHごとに非常にうまく機能し、新しいdbが必要なようです!?

使用法: <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
0
f b