Vés al contingut

Find

De la Viquipèdia, l'enciclopèdia lliure
Find

Tipusutilitat UNIXiprograma informàticModifica el valor a Wikidata

Ensistemes operatiussemblant a Unixi en alguns altres,findés una aplicació de consola que cerca en un o diversosarbres de directorissd'unsistema de fitxers,trobafitxersbasant-se amb els criteris especificats per l'usuarii aplica l'acció indicada en cada un dels fitxers que ha trobat. Els criteris de cerca poden ser unpatró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 defectefindtorna una llista amb tots els fitxers del directori actual.[1]

El programa relacionatlocateutilitza un base de dades d'indexs a fitxers obtinguts a partir defind(actualitzada a internvals regulars, típicament fent servircron) 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'ordrefindha de tractar el [Enllaç simbòlic|enllaços simbòlics]. Per defectefindno segueix mai els enllaços, però també es pot indicar explícitament amb el paràmetre-P.El paràmetre-Lfa quefindsegueixi els enllaços simbòlics. Amb-Hnomé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 defind.

Com a mínim hi ha d'haver un camí abans de l'expressió a cercar.findés capaç d'interpretarcomodinsde manera interna i les ordres s'han d'escriure amb compte perquè no interfereixi ambl'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óGNUdefindconté un gran nombre de característiques addicionals fora de les especificacions dePOSIX.

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 ambmy.Les cometes simples eviten l'engloblament dela consola—sense elles la consola substituiriamy*per la llista de tots els fitxers que comencen permyen el directori actual.

Executantfind. -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,findexectua l'acció '-print'. (Les primeres versions defindno 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 nommyfilei 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 subarbreexcluded_path(que és un camí complet inclosa la/del principi) un fitxer anomenatmyfile.

Especifica un directori

[modifica]
find /home/weedly -name "myfile" -type f -print

Cerca un fitxer anomenatmyfileal directori/home/weedly,el directori inici de l'usuariweedly.É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 anomenatmydiren el subdirectorilocalsota 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.mp3dins del directori/var/ftp/mp3.L'acció s'especifica amb l'opció-execchmod644 {} \;com a paràmetre. Per a cada fitxer que acabi en.mp3,s'executa l'ordrechmod 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 permisos644,que normalment es mostren com arw-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 enWindowsno 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 utilitzantxargsen 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óprint0per 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 perfinds'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. 1,01,11,2Find– Commands & Utilities Reference,Single UNIX Specification,capítol 7 deThe Open Group

Enllaços externs

[modifica]