Wie füge ich bestimmte Verzeichnisse zum Suchpfad "aktualisiert" hinzu?

7

Ich bewahre meine digitale Musik und meine digitalen Fotos in Verzeichnissen in einer Windows-Partition auf, die /media/win_cauf meiner Dual-Boot-Box installiert ist . Ich möchte diese Verzeichnisse - aber nur diese Verzeichnisse - in die locateDatenbank aufnehmen. Soweit ich das beurteilen kann, updatedb.confbietet es jedoch nur Optionen zum Ausschließen von Verzeichnissen, nicht zum Hinzufügen. Natürlich, ich entfernen konnte /mediaaus PRUNEPATHS, und dann eine ganze Reihe von Unterverzeichnissen hinzufügen ( /media/win_c/Drivers, /media/win_c/ProgramData...) , aber dies scheint eine sehr klobig Art und Weise , es zu tun-sicher ist es eine elegantere Lösung?

(Ich habe versucht, nur Softlinks zu den Windows-Verzeichnissen von einer indizierten Linux-Partition aus zu erstellen, aber das scheint nicht zu helfen.)

ionh
quelle
Welche aktualisierte Implementierung haben Sie? Es gibt einige. Sagen Sie uns die Ausgabe von updatedb --version.
Gilles 'SO - hör auf böse zu sein'
Sorry, hätte das geben sollen - "aktualisierteb (mlocate) 0.26"
ionh

Antworten:

4

Dafür gibt es keine Option updatedb.conf. Sie müssen festlegen, dass Optionen updatedbmanuell übergeben werden.

Mit aktualisiertem B von GNU findutils bestehen --localpaths.

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

Mit updatedb von mlocate gibt es keine Möglichkeit, mehrere Roots anzugeben oder ein Verzeichnis vom Bereinigen auszuschließen. Ich denke, Sie haben eine Datenbank pro Verzeichnis. Setzen Sie die Umgebungsvariable LOCATE_PATHauf die Liste der Datenbanken:

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"
Gilles 'SO - hör auf böse zu sein'
quelle
3

Verwenden Sie bei der Implementierung "mlocate" die --database-rootOption, ohne etwas zu beschneiden. In der aktualisierten Manpage 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.

Möglicherweise müssen Sie jedoch auch eine separate Ausgabedatei ( --output) verwenden. Ich bin nicht sicher, ob Sie beide Datenbanken zusammenführen können (Sie können es versuchen).

Andere Implementierungen haben möglicherweise ähnliche Optionen.

vinc17
quelle
Das ist die mlocate-Implementierung. Verschiedene aktualisierte Implementierungen haben unterschiedliche Optionen.
Gilles 'SO - hör auf böse zu sein'
@ Gilles Danke, in der Tat benutze ich mlocate. Ich habe meine Antwort bearbeitet. Ich wäre überrascht, wenn andere Implementierungen keine ähnliche Option hätten.
vinc17
Mit "lokalisieren" in Ubuntu haben Sie den Befehl beantwortet. Fügen Sie auch den Export als erste Antwort hinzu, um sicherzugehen, dass der Stammpfad und der gerade hinzugefügte Pfad enthalten sind
Diego Andrés Díaz Espinoza
0

gotscha jetzt habe ich es .. oder? mlocate ist nicht so einfach, aber das funktioniert ziemlich gut für jeden -U, --database-root PATH in mlocate. Es scheint, dass Sie eine neue Datenbank benötigen!?

Verwendung: <script>'Begriff'

#!/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
fb
quelle