Sophie

Sophie

distrib > Mandriva > 10.0 > i586 > by-pkgid > 48e6004f7274ccc2095a5ab8f2460dd2 > files > 33

mandrake-doc-es-10.0-5.1.100mdk.noarch.rpm

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>find: Busca archivos en función de ciertos
   criterios</title><meta name="generator" content="DocBook XSL Stylesheets V1.64.0"><link rel="home" href="index.html" title="Guía de Referencia"><link rel="up" href="cmdutils.html" title="Capítulo 5. Los utilitarios de la línea de
  comandos"><link rel="previous" href="command-files.html" title="Operaciones y filtrado de archivos"><link rel="next" href="command-sheduling.html" title="Programar la ejecución de comandos"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">find: Busca archivos en función de ciertos
   criterios</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command-files.html">Anterior</a> </td><th width="60%" align="center">Capítulo 5. Los utilitarios de la línea de
  comandos</th><td width="20%" align="right"> <a accesskey="n" href="command-sheduling.html">Siguiente</a></td></tr></table><hr></div><div class="sect1" lang="es"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="command-find"></a>find: Busca archivos en función de ciertos
   criterios</h2></div></div><div></div></div><p><a name="BId-cmdutils-pa50"></a><a class="indexterm" name="BIdNEW-cmdutils-it9"></a> <a class="indexterm" name="BId-cmdutils-it2"></a><span><b class="command">find</b></span> es un
    utilitario de <span class="application">UNIX</span> muy antiguo. Su rol es recorrer
    recursivamente uno o más directorios y encontrar archivos que se
    correspondan con un cierto conjunto de criterios en esos
    directorios. Aunque es muy útil, su sintaxis es verdaderamente
    arcana, y usarlo requiere cierta práctica. La sintaxis general es:

<a name="BId-cmdutils-sc6"></a></p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">find [opciones] [directorios] [criterio] [acción]</pre></td></tr></table><p>
   
   Si no especifica directorio alguno, <span><b class="command">find</b></span> buscará
   en el directorio corriente. Si no especifica el criterio, esto es
   equivalente a “<span class="quote">verdadero</span>”, por lo que se encontrarán
   todos los archivos. Las opciones, criterios y acciones son tan
   numerosas que solo mencionaremos algunas de cada una. Comencemos
   por las opciones:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-cmdutils-pa51"></a>
     <tt class="option">-xdev</tt>: No extender la búsqueda a los directorios
     ubicados en otros sistemas de archivos.</p></li><li><p><a name="BId-cmdutils-pa52"></a><tt class="option">-mindepth
     &lt;n&gt;</tt>: Descender al menos <tt class="option">&lt;n&gt;</tt>
     niveles bajo el directorio especificado antes de comenzar a
     buscar los archivos.</p></li><li><p><a name="BId-cmdutils-pa53"></a><tt class="option">-maxdepth
     &lt;n&gt;</tt>: Buscar los archivos que se encuentran a lo
     sumo <tt class="literal">n</tt> niveles bajo el directorio
     especificado.</p></li><li><p><a name="BId-cmdutils-pa54"></a><tt class="option">-follow</tt>: Seguir
     los vínculos simbólicos si apuntan a directorios.
     Predeterminadamente, <span><b class="command">find</b></span> no los sigue.</p></li><li><p><a name="BId-cmdutils-pa55"></a><tt class="option">-daystart</tt>:
     Cuando se usan las pruebas relativas a la fecha y la hora (ver
     debajo), toma el comienzo del día corriente como etiqueta
     temporal en vez del predeterminado (24 horas antes de la hora
     corriente).</p></li></ul></div><p><a name="BId-cmdutils-pa56"></a>Un criterio puede ser una o más de
   varias pruebas <a name="BId-cmdutils-gt1" href="glossary.html#term-atomic"><i class="glossterm">atómicas</i></a>; algunas pruebas útiles
   son:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-cmdutils-pa57"></a><tt class="option">-type
     &lt;tipo&gt;</tt>: Busca los archivos de un tipo dado;
     <tt class="option">&lt;tipo&gt;</tt> puede ser uno de:
     <tt class="literal">f</tt> (archivo regular), <tt class="literal">d</tt>
     (directorio), <tt class="literal">l</tt> (vínculo simbólico),
     <tt class="literal">s</tt> (<span class="foreignphrase"><i class="foreignphrase">socket</i></span>),
     <tt class="literal">b</tt> (archivo en modo de bloques),
     <tt class="literal">c</tt> (archivo en modo caracter) o
     <tt class="literal">p</tt> (tubería nombrada).</p></li><li><p><a name="BId-cmdutils-pa58"></a><tt class="option">-name &lt;patrón&gt;</tt>:
     Encontrar los archivos cuyo nombre se corresponde con el
     <tt class="option">&lt;patrón&gt;</tt> dado. Con esta opción, se trata a
     <tt class="option">&lt;patrón&gt;</tt> como un <i class="glossterm"><a name="BId-cmdutils-gt2"></a>patrón de englobamiento</i> del shell
     (consulte <a href="glob-regex.html" title="Patrones de englobamiento del
   shell">“Patrones de englobamiento del
   shell”</a>).</p></li><li><p><a name="BId-cmdutils-pa59"></a><tt class="option">-iname
     &lt;patrón&gt;</tt>: Como <tt class="option">-name</tt>, pero sin
     tener en cuenta la capitalización.</p></li><li><p><a name="BId-cmdutils-pa60"></a><tt class="option">-atime
      &lt;n&gt;</tt>, <tt class="option">-amin &lt;n&gt;</tt>: Encontrar
      los archivos a los que se ha accedido por última vez hace
      <tt class="option">&lt;n&gt;</tt> días (<tt class="option">-atime</tt>)
      o hace <tt class="option">&lt;n&gt;</tt> minutos
      (<tt class="option">-amin</tt>). También puede especificar
      <tt class="option">+&lt;n&gt;</tt> o <tt class="option">-&lt;n&gt;</tt>, en
      cuyo caso la búsqueda se hará para los archivos accedidos
      respectivamente hace al menos o a lo sumo
      <tt class="option">&lt;n&gt;</tt> días/minutos.</p></li><li><p><a name="BId-cmdutils-pa61"></a><tt class="option">-anewer
     &lt;archivo&gt;</tt>: Encontrar los archivos que han sido
     accedidos más recientemente que el archivo
     <tt class="option">&lt;archivo&gt;</tt>.</p></li><li><p><a name="BId-cmdutils-pa62"></a><tt class="option">-ctime
      &lt;n&gt;</tt>, <tt class="option">-cmin &lt;n&gt;</tt>,
      <tt class="option">-cnewer &lt;archivo&gt;</tt> Igual que para
      <tt class="option">-atime</tt>, <tt class="option">-amin</tt> y
      <tt class="option">-anewer</tt>, pero se aplica a la última fecha en la
      cual se modificó el contenido del archivo.</p></li><li><p><a name="BId-cmdutils-pa63"></a><tt class="option">-regex &lt;patrón&gt;</tt>:
     Como <tt class="option">-name</tt>, pero <tt class="literal">patrón</tt>
     se trata como una <i class="glossterm"><a name="BId-cmdutils-gt3"></a>expresión
     regular</i>.</p></li><li><p><a name="BId-cmdutils-pa64"></a><tt class="option">-iregex
     &lt;patrón&gt;</tt>: Como <tt class="option">-regex</tt>, pero sin
     distinguir entre mayúsculas y minúsculas.</p></li></ul></div><p><a name="BId-cmdutils-pa65"></a>Existen muchas otras pruebas, debe
   consultar <span class="citerefentry"><span class="refentrytitle"><a name="BId-cmdutils-rt1"></a>find</span>(1)</span> para más
   detalles. Para combinar las pruebas, Usted puede utilizar uno
   de:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-cmdutils-pa66"></a><tt class="option">&lt;c1&gt; -a
     &lt;c2&gt;</tt>: Verdadero si tanto
     <tt class="option">&lt;c1&gt;</tt> como <tt class="option">&lt;c2&gt;</tt> son
     verdaderas; <tt class="option">-a</tt> está implícito, por lo tanto
     puede ingresar <tt class="option">&lt;c1&gt; &lt;c2&gt; &lt;c3&gt;</tt>
     ... si quiere que todas las pruebas <tt class="option">&lt;c1&gt;</tt>,
     <tt class="option">&lt;c2&gt;</tt>, ... sean verdaderas.</p></li><li><p><a name="BId-cmdutils-pa67"></a><tt class="option">&lt;c1&gt; -o
     &lt;c2&gt;</tt>: Verdadero si <tt class="option">&lt;c1&gt;</tt> o
     <tt class="option">&lt;c2&gt;</tt> o ambos son verdaderos. Note que
     <tt class="option">-o</tt> tiene una <a name="BId-cmdutils-gt4" href="glossary.html#term-precedence"><i class="glossterm">precedencia</i></a> menor que
     <tt class="option">-a</tt>, por lo tanto si desea, por ejemplo, los
     archivos que verifican los criterios <tt class="option">&lt;c1&gt;</tt>
     o <tt class="option">&lt;c2&gt;</tt> y verifican el criterio
     <tt class="option">&lt;c3&gt;</tt>, tendrá que usar paréntesis y
     escribir <tt class="option">( &lt;c1&gt; -o &lt;c2&gt; ) -a
     &lt;c3&gt;</tt>. Debe <a name="BId-cmdutils-gt5" href="glossary.html#term-escape"><i class="glossterm">escapar</i></a> (desactivar) los
     paréntesis, ya que si no lo hace ¡el shell los
     interpretará!</p></li><li><p><a name="BId-cmdutils-pa68"></a><tt class="option">-not &lt;c1&gt;</tt>:
     Invertir la prueba <tt class="option">&lt;c1&gt;</tt>, por lo tanto
     <tt class="option">-not &lt;c1&gt;</tt> es verdadero si
     <tt class="option">&lt;c1&gt;</tt> es falso.</p></li></ul></div><p><a name="BId-cmdutils-pa69"></a>Finalmente, puede especificar una
   acción para cada archivo encontrado. Las acciones más usadas
   frecuentemente son:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-cmdutils-pa70"></a><tt class="option">-print</tt>:
     Simplemente imprime el nombre de cada archivo en la salida
     estándar. Esta es la acción predeterminada.</p></li><li><p><a name="BId-cmdutils-pa71"></a><tt class="option">-ls</tt>: Imprime en
     la salida estándar el equivalente de <span><b class="command">ls -ilds</b></span>
     para cada archivo que encuentra.</p></li><li><p><a name="BId-cmdutils-pa72"></a><tt class="option">-exec
     &lt;comando&gt;</tt>: Ejecutar el comando
     <tt class="option">&lt;comando&gt;</tt> sobre cada archivo encontrado.
     La línea de comandos <tt class="option">&lt;comando&gt;</tt> debe
     terminar con un <tt class="literal">;</tt>, que deberá desactivar para
     que el shell no lo interprete; la posición del archivo se
     representa con <tt class="literal">{}</tt>. Vea los ejemplos
     de uso para entender mejor esto.</p></li><li><p><a name="BId-cmdutils-pa73"></a><tt class="option">-ok
     &lt;comando&gt;</tt>: Igual que <tt class="option">-exec</tt> pero
     pedir confirmación para cada comando.</p></li></ul></div><p><a name="BId-cmdutils-pa74"></a>¿Todavía está aquí? Está bien,
   ahora practiquemos un poco, ya que todavía es la mejor forma de
   entender a este monstruo. Digamos que quiere encontrar todos los
   directorios en <tt class="filename">/usr/share</tt>. Entonces
   ingresará:</p><p><a name="BId-cmdutils-pa75"></a><a name="BId-cmdutils-sc7"></a></p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">find /usr/share -type d</pre></td></tr></table><p><a name="BId-cmdutils-pa76"></a>Suponga que tiene un servidor
   <span class="acronym">HTTP</span>, todos sus archivos <span class="acronym">HTML</span> están en
   <tt class="filename">/var/www/html</tt>, que coincide con su directorio
   corriente. Usted desea encontrar todos los archivos que no se
   modificaron en el último mes. Debido a que tiene páginas de varios
   autores, algunos archivos tienen la extensión
   <tt class="filename">html</tt> y otros la extensión
   <tt class="filename">htm</tt>. Desea vincular estos archivos en el
   directorio <tt class="filename">/var/www/obsolete</tt>. Entonces
   ingresará<sup>[<a name="id2546050" href="#ftn.id2546050">19</a>]</sup>:</p><p><a name="BId-cmdutils-pa78"></a><a name="BId-cmdutils-sc8"></a></p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">find \( -name "*.htm" -o -name "*.html" \) -a -ctime -30 \
-exec ln {} /var/www/obsolete \;</pre></td></tr></table><p><a name="BId-cmdutils-pa79"></a>Está bien, este es uno un poco
   complejo y requiere una pequeña explicación. El criterio es
   este:</p><p><a name="BId-cmdutils-pa80"></a><a name="BId-cmdutils-sc9"></a></p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">\( -name "*.htm" -o -name "*.html" \) -a -ctime -30</pre></td></tr></table><p><a name="BId-cmdutils-pa81"></a>que hace lo que queremos: encuentra
   todos los archivos cuyos nombres terminan con
   <tt class="filename">.htm</tt> o con <tt class="filename">.html</tt>
   “<span class="quote"><tt class="literal">\( -name "*.htm" -o -name
   "*.html" \)</tt></span>”, <span class="emphasis"><em>y</em></span>
   (<tt class="literal">-a</tt>) que no han sido modificados en los últimos
   30 días, lo que es más o menos un mes (<tt class="literal">-ctime
   -30</tt>) Note los paréntesis: aquí son necesarios, porque
   <tt class="literal">-a</tt> tiene una precedencia mayor. Si no hubiera
   paréntesis alguno, se hubieran encontrado todos los archivos que
   terminen con <tt class="filename">.htm</tt>, y todos los archivos que
   terminen con <tt class="filename">.html</tt> y que no han sido
   modificados por un mes, que no es lo que nosotros queremos. Note
   también que los paréntesis están desactivados para el shell: si
   hubiésemos puesto <tt class="literal">( .. )</tt> en vez de
   <tt class="literal">\( .. \)</tt>, el shell los hubiese
   interpretado y tratado de ejecutar <tt class="literal">-name "*.htm"
   -o -name "*.html"</tt> en un sub-shell... Otra
   solución podría haber sido poner los paréntesis entre comillas
   simples o dobles, pero aquí es preferible una contrabarra ya que
   simplemente tenemos que aislar un caracter solo.</p><p><a name="BId-cmdutils-pa82"></a>Y finalmente, está el comando a
   ejecutar para cada uno de los archivos:</p><a name="BId-cmdutils-sc10"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">-exec ln {} /var/www/obsolete \;</pre></td></tr></table><p><a name="BId-cmdutils-pa84"></a>Aquí también, tiene que desactivar
   el <tt class="literal">;</tt> para el shell, ya que de no ser así
   el shell lo interpretaría como un separador de comandos. Si
   no lo hace, <span><b class="command">find</b></span> se quejará de que le falta un argumento a
   <tt class="option">-exec</tt>.</p><p><a name="BId-cmdutils-pa85"></a>Un último ejemplo: tiene un
   directorio enorme denominado <tt class="filename">/shared/images</tt>,
   con todo tipo de imágenes en él. Regularmente, Usted usa el comando
   <span class="application">touch</span> para actualizar la fecha de un archivo denominado
   <tt class="filename">stamp</tt> en este directorio, para que tenga una
   referencia temporal. Usted quiere encontrar todas las imágenes
   <a name="BId-cmdutils-gt6" href="glossary.html#term-jpeg"><i class="glossterm"><span class="acronym">JPEG</span></i></a> en el mismo que son más
   nuevas que el archivo <tt class="filename">stamp</tt>, y ya que Usted
   obtuvo las imágenes de varias fuentes, estos archivos tienen las
   extensiones <tt class="filename">jpg</tt>, <tt class="filename">jpeg</tt>,
   <tt class="filename">JPG</tt> o <tt class="filename">JPEG</tt>. También
   quiere evitar buscar en el directorio <tt class="filename">old</tt>.
   Quiere que se le envíe la lista de estos archivos por correo
   electrónico, y su nombre de usuario es
   <b class="userinput"><tt>peter</tt></b>:</p><p><a name="BId-cmdutils-pa86"></a>
<a name="BId-cmdutils-sc11"></a></p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">
find /shared/images -cnewer     \
/shared/images/stamp       \
-a -iregex ".*\.jpe?g"     \
-a -not -regex ".*/old/.*" \
| mail peter -s "Imágenes nuevas"
</pre></td></tr></table><p>
</p><p><a name="BId-cmdutils-pa87"></a>Por supuesto, este comando no es muy
   útil si tiene que ingresarlo cada vez, y quisiera ejecutarlo
   regularmente... Puede hacer lo siguiente:</p><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2546050" href="#id2546050">19</a>] </sup>Note que este
   ejemplo necesita que <tt class="filename">/var/www</tt> y
   <tt class="filename">/var/www/obsolete</tt> ¡estén en el mismo sistema
   de archivos!</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command-files.html">Anterior</a> </td><td width="20%" align="center"><a accesskey="u" href="cmdutils.html">Subir</a></td><td width="40%" align="right"> <a accesskey="n" href="command-sheduling.html">Siguiente</a></td></tr><tr><td width="40%" align="left" valign="top">Operaciones y filtrado de archivos </td><td width="20%" align="center"><a accesskey="h" href="index.html">Inicio</a></td><td width="40%" align="right" valign="top"> Programar la ejecución de comandos</td></tr></table></div></body></html>