Como adicionar diretórios específicos ao caminho de busca “updatedb” (locate)?

5

Eu mantenho minha música digital e fotos digitais em diretórios em uma partição do Windows, montada em /media/win_c na minha caixa de inicialização dupla. Eu gostaria de incluir esses diretórios - mas apenas esses diretórios - no banco de dados locate . No entanto, até onde eu sei, updatedb.conf oferece apenas opções para excluir diretórios, não adicioná-los. Claro, eu poderia remover /media de PRUNEPATHS , e então adicionar um monte de subdiretórios ( /media/win_c/Drivers , /media/win_c/ProgramData ...) mas isso parece uma maneira muito desajeitada de fazê-lo - com certeza há um mais elegante solução?

(Eu tentei apenas criar links para os diretórios do Windows a partir de uma partição linux indexada, mas isso não parece ajudar.)

    
por ionh 23.08.2014 / 00:47

3 respostas

2

Não há opção para isso em updatedb.conf . Você precisará organizar as opções para updatedb manualmente.

Com updatedb do GNU findutils , passe --localpaths .

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

Com o updatedb do mlocate , não aparece uma maneira de especificar várias raízes ou excluir um diretório de poda, então eu acho que você está preso com um banco de dados por diretório. Defina a variável de ambiente LOCATE_PATH para a lista de bancos de dados:

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"
    
por 23.08.2014 / 01:35
1

Com a implementação "mlocate", use a opção --database-root , sem remover nada. Na página man 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.

Mas talvez seja necessário usar um arquivo de saída separado ( --output ) também. Não tenho certeza se você pode mesclar os dois bancos de dados (você pode tentar).

Outras implementações podem ter opções semelhantes.

    
por 23.08.2014 / 01:24
0

gotscha agora eu entendi .. ou? mlocate não é tão fácil, mas isso funciona muito bem para cada -U, --PATH de raiz do banco de dados em mlocate, parece que você precisa de um novo db!?

Uso: <script> 'termo'

#!/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
    
por 10.06.2018 / 01:12