Tipus | utilitat UNIX i programa informàtic ![]() |
---|---|
En sistemes operatius semblant a Unix i en alguns altres, find
és una aplicació de consola que cerca en un o diversos arbres de directoriss d'un sistema de fitxers, troba fitxers basant-se amb els criteris especificats per l'usuari i aplica l'acció indicada en cada un dels fitxers que ha trobat. Els criteris de cerca poden ser un patró per encaixar-hi el nom del fitxer o un rang de dates de modificació o d'accés que ha de tenir els fitxers a trobar. Per defecte find
torna una llista amb tots els fitxers del directori actual.[1]
El programa relacionat locate
utilitza un base de dades d'indexs a fitxers obtinguts a partir de find
(actualitzada a internvals regulars, típicament fent servir cron
) de manera que permet cercar fitxers per nom en tot el sistema de fitxer d'una manera molt més ràpida.
find [-H] [-L] [-P] path... [expression]
Les tres opcions controlem com l'ordre find
ha de tractar el [Enllaç simbòlic|enllaços simbòlics]. Per defecte find
no segueix mai els enllaços, però també es pot indicar explícitament amb el paràmetre -P
. El paràmetre -L
fa que find
segueixi els enllaços simbòlics. Amb -H
només seguirà els enllaços simbòlics mentre es processen el paràmetres de la línia d'ordres. Pot ser que aquests paràmetres no estiguin disponibles en versions antigues de find
.
Com a mínim hi ha d'haver un camí abans de l'expressió a cercar. find
és capaç d'interpretar comodins de manera interna i les ordres s'han d'escriure amb compte perquè no interfereixi amb l'engloblament de la línia d'ordres.
Els elements de les expressions estan separats per espais i s'avaluen d'esquerre a dreta. Poden contenir elements lògics com I (-a) i O (-o) així com altres predicats més complexos.
La versió GNU de find
conté un gran nombre de característiques addicionals fora de les especificacions de POSIX.
find . -name 'my*'
Cerca en el directori actual (representat per un punt, tot i que en versions modernes es pot ometre) i els seus subdirectoris fitxers i directoris que comencin amb my. Les cometes simples eviten l'engloblament de la consola—sense elles la consola substituiria my* per la llista de tots els fitxers que comencen per my en el directori actual.
Executant find. -name my*
en RedHat Linux Version 9 retorna aquest error:
find: paths must precede expression. Double quotes find. -name "my*" works fine.
find . -name "my*" -type f
D'aquesta manera es limita el resultat de la cerca de dalt a un llistat de només fitxers exloent els directoris, fitxers especial, enllaços simbòlics, etc. Igual que abans, my* està dins de dues cometes simples per evitar problemes amb la consola.
Els dos exemples anteriors mostren una llista de resultats perquè, per defecte, find
exectua l'acció '-print'. (Les primeres versions de find
no tenien cap acció per defecte i descartava el resultat de la cerca amb el que molts usuaris quedaven confusos.)
find . -name "my*" -type f -ls
Això mostra informació estesa dels fitxers.
find / -name "myfile" -type f -print
Això cerca cada directori del disc dur per un fitxer amb el nom myfile i el mostra per pantalla. Generalment no és bona idea cercar un fitxer d'aquesta manera perquè pot tardar molt de temps; és millor especificar el directori de manera més precisa.
find / -path excluded_path -prune -o -type f -name myfile -print
Cerca a tots els directoris del disc dur excepte el subarbre excluded_path (que és un camí complet inclosa la / del principi) un fitxer anomenat myfile.
find /home/weedly -name "myfile" -type f -print
Cerca un fitxer anomenat myfile al directori /home/weedly, el directori inici de l'usuari weedly. És bona idea especificar el subdirectori més a fons possible de l'arbre per motius d'eficiencia.
find local /tmp -name mydir -type d -print
Cerca un directori anomenat mydir en el subdirectori local sota el directori actual i també en el directori /tmp.
find /var/ftp/mp3 -name "*.mp3" -type f -exec chmod 644 {} \;
Aquesta ordre canvia els permisos de tots els fitxers que acabin en .mp3 dins del directori /var/ftp/mp3. L'acció s'especifica amb l'opció -exec chmod 644 {} \;
com a paràmetre. Per a cada fitxer que acabi en .mp3
, s'executa l'ordre chmod 644 {}
substituint {}
pel nom del fitxer. El punt i com (amb una barra diagonal invertida per evitar que la consola l'interpreti com al caràcter de separador d'ordres) indica el fi de l'ordre. Els permisos 644
, que normalment es mostren com a rw-r--r--
, donen al propietari permisos per llegir i escriure al fitxer, mentre que la resta d'usuaris només hi poden llegir
Si s'executa en Windows no cal incloure la barra diagonal invertida:
find . -exec grep blah {} ;
Si s'ha d'executar l'ordre per molts resultat és molt més eficient executar-la utilitzant xargs en comptes del paràmetre -exec
. xargs és molt més modern i és dissenyat per acceptar llistes llarges d'una manera molt més intel·ligent. Es pot fer servir l'opció print0
per passar la llista a xargs sense tenir problemes amb fitxers que tenen espais al nom. Per exemple:
find . -print0 | xargs -0 COMMAND
La llista de fitxers generats per find
s'encadenen simultàniament mentre s'estan generant cap a xargs qui executa COMMAND amb els fitxers que ha rebut com a paràmetres