La comanda locate troba fitxers pel nom de manera gairebé instantània, encara que busquis per tot el disc. El truc és que no recorre els directoris com fa find: consulta una base de dades amb tots els noms de fitxer del sistema, que s’actualitza periòdicament. Per això és molt ràpida, però també pot estar desactualitzada.
Quin locate tens
Hi ha hagut diverses implementacions: slocate, mlocate i, ara, plocate, que és la que fan servir les distribucions actuals (Debian, Ubuntu, Fedora…) i que ha substituït mlocate. Totes s’invoquen amb locate i accepten les opcions bàsiques. Si no la tens:
sudo apt install plocate # Debian, Ubuntu
sudo dnf install plocate # Fedora, Rocky, AlmaLinux
Just després d’instal·lar-la, crea la primera base de dades amb sudo updatedb (si no, locate no trobarà res fins a la primera actualització automàtica). A partir d’aquí s’actualitza cada dia sola (amb un temporitzador de systemd, plocate-updatedb.timer, o una tasca de cron.daily, segons la distribució).
Sintaxi
locate [opcions] patró...
Sense comodins, locate mostra totes les rutes que contenen el patró en qualsevol lloc, no només al nom del fitxer. Amb comodins (*, ?), el patró ha de coincidir amb la ruta sencera.
Opcions més útils
| Opció | Què fa |
|---|---|
-i | No distingeix majúscules i minúscules |
-b | Busca només al nom del fitxer, no a la ruta dels directoris |
-c | Mostra quants resultats hi ha, en lloc de llistar-los |
-l N | Mostra com a màxim N resultats |
-e | Només mostra fitxers que encara existeixen ara |
-r patró | El patró és una expressió regular bàsica |
--regex patró | El patró és una expressió regular estesa (amb alternatives, +, ?…) |
-0 | Separa els resultats amb un caràcter nul (per a xargs -0) |
-d fitxer | Fa servir una altra base de dades |
Exemples
Buscar un fitxer pel nom:
$ locate informe.txt
/home/oscar/Documents/informe.txt
Sense distingir majúscules (troba també Informe_2025.TXT):
$ locate -i informe
/home/oscar/Documents/Informe_2025.TXT
/home/oscar/Documents/informe.txt
Amb comodins. Posa el patró entre cometes perquè el shell no l’expandeixi:
locate '*.html'
locate '/var/www/*.html'
Comptar resultats:
$ locate -c html
2
Fitxers .txt o .csv. Fixa’t que per fer servir | cal --regex; amb -r, que és regex bàsica, no funcionaria:
$ locate --regex '\.(txt|csv)$'
/home/oscar/Documents/informe.txt
/home/oscar/Documents/feina/dades.csv
Buscar un directori pel nom, sense que surti tot el que conté:
locate -b feina
Només els primers resultats:
locate -l 5 nginx.conf
Actualitzar la base de dades
Si acabes de crear un fitxer, locate no el trobarà fins que s’actualitzi la base de dades. I si l’has esborrat, encara sortirà. Per actualitzar-la a mà:
sudo updatedb
O, per amagar els fitxers que ja no existeixen sense esperar, locate -e:
$ rm web/error.log
$ locate error.log
/home/oscar/web/error.log
$ locate -e error.log
$
Quins directoris i sistemes de fitxers s’indexen es configura a /etc/updatedb.conf. Per defecte, s’exclouen /tmp, /media, els sistemes de fitxers de xarxa (NFS, CIFS…) i els virtuals (proc, sysfs…), de manera que els fitxers de discos USB o carpetes compartides no hi surten.
Compte amb…
- Patró sense comodins = cerca dins de tota la ruta:
locate webmostra tots els fitxers que hi ha dins de qualsevol directori que es diguiweb. Fes servir-bsi només t’interessa el nom. - Només veus el que pots llegir:
plocatenomés mostra els fitxers dels directoris als quals tens accés com a usuari, encara que la base de dades els contingui tots. - L’opció
-eno exclou res: en algunes guies es fa servir com si volgués dir «excepte». No: vol dir existing, «només els que existeixen». Per excloure resultats, encadena-ho ambgrep -v:locate '*.log' | grep -v '/journal/'.
locate o find?
locate: cerques per nom, ràpides, a tot el sistema, quan no importa que el resultat sigui d’ahir.find: quan necessites l’estat actual del disc, o filtrar per mida, data, permisos o propietari, o fer alguna cosa amb els resultats.