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.
Otra posible forma sería con "find":
ResponderEliminar# find `pwd` | grep -i cr2
donde `pwd` tiene la misma función que en el uso de "tree".