Con el terminal: Ejemplos con el comando Find

A continuación, algunos ejemplos que podemos aprovechar cuando hacemos uso de Find, un comando para buscar archivos o carpetas.

Para obtener la ayuda del comando ejecute:

man find

para abandonar el manual basta con oprimir la tecla [q] (válido para cualquier manual).

En los ejemplos siguientes el punto (.) después de find (find .) significa que estamos buscando en la carpeta que indica el prompt. Se puede sustituir por cualquier ruta válida como /home/.

Ejemplos:

Simplemente buscar archivos con un patrón.
find . -type f -name "*.deb"

buscar y copiar hacia /home/pepe/
find . -type f -name "*.deb" -exec cp -f {} /home/pepe/ \;

Buscar los archivos Thumbs.db y eliminarlos.
find . -type f -name "Thumbs.db" -exec rm -f {} \;

Crear un archivo de texto puro con el md5 de los ficheros en el directorio.
find . -type f -print0 | xargs -0 -n 1 md5sum >> md5.txt

Eliminar las molestas carpetas .svn.
find | grep "\.svn$" | xargs rm -fr

Remplaza un texto por otro.
find -type f | xargs sed -i "s/TEXTO/OTRO/g" *.php

Buscar los archivos actualizados hasta un día atrás.
find /var/log/[a-z]* \*.sql -mtime +1

Para Generar los archivos md5sums de los paquetes DEB:
find . -type f ! -regex ‘.*\.hg.*’ ! -regex ‘.*?debian-binary.*’ ! -regex ‘.*?DEBIAN.*’ -printf ‘%P ‘ | xargs md5sum > DEBIAN/md5sums


16 comentarios

  1.   proper dijo

    eliminar todos los archivos que no sean .txt (obviamente .txt puede ser cualquier cosa)
    find . ! -name “*.txt” -exec rm {} \ ;

    buscar sin coincidencias de mayúsculas o minúsculas:
    find . -iname “*foobar*”

    Observación: no se puede ejecutar el comando -exec con el parámetro -iname.

  2.   taregon dijo

    Excelente 😉 este comando debería ser obligatorio saberlo, antes me asustaba la opciones que existían en ‘man’ para poder hacer búsquedas, pero dándole la oportunidad pude ver lo potente que es a la hora de encontrar aquello que olvide en mi disco duro 😐

  3.   Hugo dijo

    Find es ciertamente útil, especialmente para lidiar con nombres de archivos que incluyen espacios y otros caracteres inusuales. Por ejemplo, recuerdo una vez que no había manera de que consiguiera comprimir un conjunto de directorios, hasta que se me ocurrió usar find con xargs (que por cierto es mucho más rápido que -exec), y problema resuelto.

    Otro de mis usos preferidos para el comando find es cambiar permisos recursivamente:


    find . -type d -print0 | xargs -0 chmod 755
    find . -type f -print0 | xargs -0 chmod 644

  4.   electron222 dijo

    Interesante ^_^

    1.    KZKG^Gaara dijo

      Qué chulo se ve el ícono de Chakra jajajajajaja 😀

      1.    sieg84 dijo

        falta el de Mageia 🙂

        1.    KZKG^Gaara dijo

          Sip cierto 😀
          Ya mismo me pongo en función de este jejejeje. Thanks 🙂

          1.    lesterzone dijo

            Y uno para mi distro…

  5.   Archero dijo

    Gracias, muy útiles los comandos, tengo una duda recuerdo que en Ubuntu alguna vez utilicé el comando locate ¿ es algún alias de find o …?

    1.    Hugo dijo

      Negativo. locate, mlocate y slocate son otros comandos de búsqueda que a diferencia de find, utilizan una base de datos que necesita actualizarse periódicamente con el comando updatedb.

      Ambos tipos de comandos tienen su utilidad. Yo por ejemplo suelo usar updatedb seguido de mlocatelocate cuando realmente quiero buscar algo rápido en un directorio con muchos datos que se que no se actualiza demasiado frecuentemente (por ejemplo, un paquete en un repositorio), y find cuando quiero hacer algo más complejo como combinar los resultados de búsqueda con otro comando, o cuando simplemente no quiero generar la base de datos porque se que el directorio en el cual voy a buscar no contiene demasiada información.

      1.    Archero dijo

        Muchisimas gracias Hugo, excelente explicación, sólo puedo decir ¡Qué potente es la terminal en gnu/linux!

  6.   Sandra dijo

    Hola, veo que es un tema viejo, pero ojalá aún puedan ayudarme.

    Estoy aprendiendo a usar las regexp desde vi tengo un documento y estoy buscando las palabras error o fail y sus derivados errors o failed o failure etc y mi regexp es:
    :/\(.*\(error|fail\).*\)/
    Al ejecutarla me dice que no hay coincidencias 🙁 pero para
    :/\(.*\(error\).*\)/
    o
    :/\(.*\(fail\).*\)/
    Si encuentra coincidencias, podrían decirme como me estoy equivocando??

    1.    KZKG^Gaara dijo

      ¿Cuál es la línea completa que estás poniendo?

      Para probar y ver si encuentro la solución.

      Por otra parte, de todas formas si quieres puedes revisar por acá: http://blog.desdelinux.net/?s=expresiones+regulares

  7.   Esthefani dijo

    Por favor ayúdenme, quiero copiar los archivos que terminen en *_ZFIR0069.TXT a otra ruta y y agregarle al final una fecha, lo estoy haciendo un comando:

    fecha=$(date +”%Y%m%d%”)
    find /xcom_rep/GAFI/salida/42 -name *_ZFIR0069.TXT -exec cp -p {} /backup/GAFI/salida/42/{}_$fecha \;

    Pero el resultado es:

    {}_20160225% –> pero solo copia un archivo de todos y se renombra de esa manera

    Lo que quiero es que copie todos los archivos y que tenga este formato *_ZFIR0069_$fecha .TXT

    Saludos.

  8.   pepG dijo

    ¿Que diferencia hay entre find * -type d y find /home/pepe -type d? quiero listar los directorios de mi cuenta y no entiendo porque el primero lo hace correctamente y el segundo no. ayudaa

  9.   kaike dijo

    como puedo buscar archivos que terminen en numeros gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.