La comanda find cerca fitxers i directoris recorrent l’arbre de directoris en temps real, i els pot filtrar pel nom, el tipus, la mida, la data, el propietari o els permisos. A més, pot fer alguna cosa amb cada resultat: mostrar-lo, esborrar-lo o passar-lo a una altra comanda. És una de les eines més potents (i més usades) de l’administració de sistemes.
Sintaxi
find [on buscar...] [criteris] [accions]
- On buscar: un o més directoris. Si no n’indiques cap,
findfa servir el directori actual (.). - Criteris (tests):
-name,-type,-size,-mtime… Si en poses diversos, s’han de complir tots (és una I lògica). - Acció: què fer amb cada resultat. Si no n’hi poses cap,
findfa-print(mostra la ruta).
Posa sempre els patrons entre cometes (-name '*.log'). Si no, el shell expandeix l’asterisc abans que find el vegi i els resultats no són els que esperes.
Criteris més útils
| Criteri | Què troba |
|---|---|
-name 'patró' | Nom que coincideix amb el patró (distingeix majúscules) |
-iname 'patró' | Igual, però sense distingir majúscules i minúscules |
-path 'patró' | La ruta sencera coincideix amb el patró |
-type f / -type d / -type l | Fitxers normals / directoris / enllaços simbòlics |
-size +1M / -size -10k | Més grans d’1 MiB / més petits de 10 KiB (unitats c, k, M, G) |
-mtime -7 / -mtime +30 | Modificats fa menys de 7 dies / fa més de 30 |
-mmin -60 | Modificats durant l’última hora |
-newer fitxer | Modificats després que fitxer |
-user joan / -group www-data | Del propietari o grup indicat |
-perm 644 / -perm -u=x / -perm /o=w | Permisos exactes / com a mínim aquests / qualsevol d’aquests |
-empty | Fitxers o directoris buits |
-maxdepth N / -mindepth N | Limita quants nivells baixa |
-xdev | No entra en altres sistemes de fitxers muntats |
Els criteris es poden negar amb ! (o -not) i combinar amb una O amb -o, agrupant amb parèntesis escapats: \( -name '*.jpg' -o -name '*.png' \).
Accions més útils
| Acció | Què fa |
|---|---|
-print | Mostra la ruta (acció per defecte) |
-print0 | Mostra les rutes separades per un caràcter nul, per a xargs -0 |
-printf 'format' | Mostra la informació que tu triïs (mida, data, permisos…) |
-ls | Mostra cada resultat com ls -dils |
-delete | Esborra els resultats |
-exec comanda {} \; | Executa la comanda una vegada per cada resultat |
-exec comanda {} + | Executa la comanda una sola vegada amb molts resultats alhora (més ràpid) |
-execdir comanda {} \; | Com -exec, però des del directori on és cada fitxer |
-ok comanda {} \; | Com -exec, però demana confirmació per a cada fitxer |
Exemples
Buscar un fitxer pel nom al directori actual i als subdirectoris:
$ find . -name document.txt
./projecte/document.txt
Buscar sense distingir majúscules (troba Informe.TXT, informe.txt…):
find ~/Documents -iname 'informe*.txt'
Llistar només els directoris, sense baixar més d’un nivell:
find /var/www -maxdepth 1 -type d
Fitxers de més d’1 MiB, amb la mida:
$ find . -type f -size +1M -exec du -h {} +
2.0M ./projecte/gran.bin
Fitxers modificats durant els últims 7 dies, amb la data al davant:
find . -type f -mtime -7 -printf '%TY-%Tm-%Td %p\n'
Fitxers d’un usuari concret dins de /home:
find /home -type f -user joan
Fitxers executables pel propietari (qualsevol que tingui la x d’usuari):
find . -type f -perm -u=x
Fitxers que qualsevol pot escriure, un problema de seguretat habitual en servidors web:
find /var/www -type f -perm -o=w
Fotos amb dues extensions possibles:
find . -type f \( -iname '*.jpg' -o -iname '*.png' \)
Directoris buits:
find . -type d -empty
Buscar un text dins de tots els fitxers .conf (amb +, grep s’executa poques vegades i és molt més ràpid que amb \;):
find /etc -name '*.conf' -exec grep -l 'Listen' {} + 2>/dev/null
Esborrar els .log de més de 30 dies. Comprova primer la llista i, quan sigui correcta, afegeix-hi -delete al final:
find /var/tmp/exportacions -type f -name '*.log' -mtime +30
find /var/tmp/exportacions -type f -name '*.log' -mtime +30 -delete
Compte amb…
- L’ordre importa:
findavalua d’esquerra a dreta.find . -delete -name '*.log'esborraria tot abans de mirar el nom.-deletesempre l’últim. - Les cometes als patrons:
find . -name *.txtfunciona per casualitat si al directori actual no hi ha cap.txt, però falla (o busca una altra cosa) si n’hi ha. - Els arrodoniments de
-sizei-mtime:-size -1Mnomés troba fitxers buits, perquè la mida s’arrodoneix cap amunt a MiB (fes servir-size -1024k). I-mtime +1vol dir «fa com a mínim 2 dies», perquè compta dies sencers. - Els errors de permisos: si busques per tot el sistema com a usuari normal, afegeix
2>/dev/nullper amagar elsPermission denied. -exec rm: per esborrar,-deleteés més segur i ràpid que-exec rm {} \;.
Receptes de find al blog
- Canviar els permisos de tots els fitxers recursivament
- Crear miniatures de totes les imatges d’un directori
- Buscar fitxers
.rpmsense entrar en discos externs - Buscar fitxers
.rpmi canviar-ne els permisos - Fitxers creats o canviats en els últims 10 dies
- Canviar espais i caràcters estranys per guions baixos
- Buscar fitxers amb el bit SUID