私のデジタルミュージックとデジタル写真は、デュアルブートボックスの/media/win_c
にマウントされたWindowsパーティションのディレクトリに保存しています。 locate
データベースにこれらのディレクトリ(ただし、それらのディレクトリのみ)を含めたいと思います。ただし、私が知る限り、updatedb.conf
はディレクトリを除外するオプションのみを提供し、追加はできません。もちろん、/media
をPRUNEPATHS
から削除してから、一連のサブディレクトリ(/media/win_c/Drivers
、/media/win_c/ProgramData
...)を追加することもできますが、これは非常に不格好な方法のようですそれを行うことのより確かにもっとエレガントな解決策がありますか?
(インデックス付けされたLinuxパーティションからWindowsディレクトリへのソフトリンクを作成することを試みましたが、それは役に立たないようです。)
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
)も。両方のデータベースをマージできるかどうかはわかりません(試すことができます)。
他の実装でも同様のオプションがある場合があります。
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