Find
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]
Tipus | utilitat UNIX |
---|---|
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.
Sintaxi de find[1] modifica
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.
Exemples modifica
Des del directori actual modifica
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.
Només fitxers modifica
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.
Comandaments[1] modifica
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.
Cerca a tots els directoris modifica
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.
Cerca a tots els directoris excepte un modifica
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.
Especifica un directori modifica
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.
Cerca a diversos directoris modifica
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.
Executa una acció modifica
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
Referències modifica
- ↑ 1,0 1,1 1,2 Find – Commands & Utilities Reference, Single UNIX Specification, capítol 7 de The Open Group
Enllaços externs modifica