Find
Tipus | utilitat UNIXiprograma informàtic |
---|---|
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 defectefind
torna una llista amb tots els fitxers del directori actual.[1]
El programa relacionatlocate
utilitza 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.
find [-H] [-L] [-P] path... [expression]
Les tres opcions controlem com l'ordrefind
ha de tractar el [Enllaç simbòlic|enllaços simbòlics]. Per defectefind
no segueix mai els enllaços, però també es pot indicar explícitament amb el paràmetre-P
.El paràmetre-L
fa quefind
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 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óGNUdefind
conté 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.
Els dos exemples anteriors mostren una llista de resultats perquè, per defecte,find
exectua l'acció '-print'. (Les primeres versions defind
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 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ó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 perfind
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,01,11,2Find– Commands & Utilities Reference,Single UNIX Specification,capítol 7 deThe Open Group
Enllaços externs
[modifica]