Mostrando entradas con la etiqueta grep. Mostrar todas las entradas
Mostrando entradas con la etiqueta grep. Mostrar todas las entradas

jueves, 5 de septiembre de 2013

Búsqueda de ficheros. Terminal, ls y tree

En ocasiones es necesario encontrar ficheros que hemos utilizado -o no- en el pasado y que tenemos almacenados en el disco duro. Muchos años atras, cuando el disco duro tenía 40 MB y había 10 usuarios por ordenador los ficheros se guardaban en disquetes y eran fáciles de encontrar, pero hoy, con discos de hasta 4 TB, la información se almacena el disco duro y, con suerte, en una copia externa en otro disco duro. Este sistema nuevo de manejar la información nos pone ante discos duros con cientos de miles de ficheros en decenas de miles de directorios. Incluso el almacenamiento en la nube está saturado de decenas de miles. Como ejemplo, mi Dropbox, que tiene solo lo que estoy usando actualmente para trabajar ha llegado a 23 GB y decenas de miles de ficheros; véase


y el directorio de usuario tiene más de medio millón de ficheros


Por supuesto, cuando es necesario encontrar algún fichero de los trabajos de hace 20 años, o incluso 8, como me ha pasado a mi la semana pasada, a veces los ficheros no se encuentran fácilmente, bien por que ahora usamos una lógica distinta a la que usábamos antes para los nombres de los directorios o de los ficheros o por que los hemos recolocado una y otra vez a lo largo de los años. He estado toda la semana encontrando una solución en terminal, partiendo de una orden ls general, que luego tunelizaba hasta un filtro grep basándome con un pequeño grupo de caracteres que debieran estar en el nombre de esos ficheros.
Para verlo pondremos un ejemplo, partiendo de los ficheros CR2 que hemos estado utilizando para la entrada anterior; si tecleamos

ls -Rla | grep CR2

obtenemos lo siguiente,


Vemos los ficheros, pero no sabemos donde están. Cada letra de las opciones son para algo
R - orden recursiva. Así, mira todos los subdirectorios del directorio donde la hemos lanzado (en est aso, el home de usuario (más de 50.000 directorios y 600.000 ficheros)
l - nos da información de los permisos, el propietario y grupo del fichero, los inodos, su tamaño y nombre; sin embargo, no nos da la ruta absoluta
a - muestra todos los ficheros y directorios, incluidos los ocultos

Eso nos deja con la tranquilidad de ver que están, pero sin saber exactamente donde. Para ello debemos usar el comando tree (como muy amablemente me indicó ayer mi amigo hckorootx). Si ejecutamos

tree -afiR $PWD | grep CR2

obtenemos lo que queríamos, la ruta completa a los ficheros


Las opciones incluidas son:
a -  de nuevo incluye los ficheros ocultos
f - está es la opción que nos transmite las rutas completas de los ficheros
i - evita que la ruta quede dibujada en líneas de indentación de los directorios, que es difícil de leer
R - búsqueda recursiva en todos lo subdirectorios

Si no incluimos $pwd, obtenemos la ruta a partir del directorio base del usuario que ha ejecutado


Eso sí,Linux diferencia mayúsculas de minúsculas, así que si hubieramos pedido

tree -afiR $PWD | grep cr2

hubiera salido otra cosa


Para evitar eso, y teniendo enuenta que s muy difícil recordar que tipo de letra usábamos hace tiempo (y sobre todo en windows, que no diferencia mayúsculas y minúsculas), debemos incluir la opción -i en el filtrado realizado por grep


tree -afiR $PWD | grep -i cr2


Perfecto.



lunes, 16 de enero de 2012

¿Dónde está y como se llama el ejecutable de Writer-LibreOffice?

A lo largo de todos estos meses en los que he estado usando LibreOffice nunca me he preguntado ni dónde estaban los ejecutables ni como se llamaban. Sin embargo, hoy he necesitado saber donde estaban (para que un determinado tipo de ficheros se abriera con writer) y he descubierto que aun se llama oowriter. Estuve buscando en /usr/bin y /usr/sbin pero no lo encontraba. Con whereis no funciona poner *writer, hay que poner el nombre completo, con lo que lo detecté con find (me fui al directorio raíz y lancé la búsqueda). Salió un montón de cosas, pero después lo he filtrado con grep para que se vea fácilmente en esta imagen.



En resumen, no lo encontraba por que no lo buscaba con oo por delante. Ahora que lo sé, simplemente whereis oowriter, y listo:


Así que, sí, librewriter se llama -aun- oowriter.

Actualización: como respuesta al primer comentario hoy, 7 de junio de 2012 sigue llamándose oowriter, al menos en mi distribución (Fedora 17, con kernel 3.4.0.1)



lunes, 25 de julio de 2011

Búsqueda de ficheros a través de una cadena de texto interna. Otra de terminal

Hoy estaba buscando datos antiguos en mi directorio Documentos. Es bastante complejo, por que ese directorio contiene lo que viene a ser la copia de todo mi trabajo desde 1990. En conjunto contiene 172612 ficheros -algunos muy repetidos con pequeñas variaciones- en 115,6GB, comprobado con filelight.


Yo siempre he usado kdirstat, pero en Ubuntu 11.04 no está disponible en los repositorios y me he pasado a este nuevo -para mi- mapa de disco duro, que no está nada mal. Bueno, no nos dispersemos. Como es natural es muy difícil encontrar un fichero ahí, sobre todo cuando no recordamos como se llama. Decidí buscarlo a través de una búsqueda de texto interno; mediante una cadena que estaba seguro que tenían que contener, pude encontrar 5 copias distintas para poder extraer la información deseada. La orden final en terminal, basándonos finalmente en algunos comentarios realizados a este blog, fue:

find /ruta/ -type f -exec grep -il CADENA {}\;

aunque se logran los mismos resultados con

find /ruta/ -type f | xargs grep -i CADENA

Es conveniente estudiar los man de los diferentes comandos (man find y man grep) para entender que hace cada cosa. Realmente había dado muchas ordenes basándome es mis limitados conocimientos de terminal, pero lo que hacía que no pudiera encontrar los ficheros era la falta de -i, que hace que no se diferencien mayúsculas y minúsculas (man grep: "Ignore case distinctions in both the PATTERN and the input files"). Esos ficheros estaban escritos en mi época oscura de Windows y tenía cierta tendencia a llamar a las variables con mayúscula inicial, y por ello me fallaba siempre mi cadena de búsqueda.