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, deja el tuyo
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.
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 😐
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
Interesante ^_^
Qué chulo se ve el ícono de Chakra jajajajajaja 😀
falta el de Mageia 🙂
Sip cierto 😀
Ya mismo me pongo en función de este jejejeje. Thanks 🙂
Y uno para mi distro…
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 …?
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.
Muchisimas gracias Hugo, excelente explicación, sólo puedo decir ¡Qué potente es la terminal en gnu/linux!
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??
¿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á: https://blog.desdelinux.net/?s=expresiones+regulares
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.
¿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
como puedo buscar archivos que terminen en numeros gracias