Un ratito tranquilo ...
De como utilizar el comando find … (ACT)

El comando find, es un comando muy potente de búsqueda desde linea de comandos, pero esta potencia a su vez se torna en su contra por la multitud de opciones y parámetros que nos encontramos. Aqui unos ejemplos que me han servido a mi para realizar varias tareas del día a día.

Ejemplo1:
Buscar los archivos temporales (o de respaldo), que me ha generado el editor de textos. Dos maneras diferentes

Comando : 

1: find . -name ._* -type f -print
2: find . -iregex «^.*\/\._.*$»

Ahora haciendo uso de tuberias y xargs seriamos capaz de borrar estos ficheros que ha encontrado

Comando:

1. find . -name ._* -type f -print | xargs rm -f
2. find . -iregex «^.*\/\._.*$» | xargs rm -f

Explicación : 
Busca en el directorio actual, los archivos de la forma «._nombrearchivo.ext». Luego hemos hecho el uso de tuberias y xargs, para realizar la acción de borrado de dichos ficheros.

Ejemplo2:
Queremos buscar archivos con cierta/s extensiones en una o varias ubicaciones.

Tenemos dos maneras de hacerlo, con nuestras queridas a la vez que odiadas expresiones regulares, o con parámetros propios del find

Comando:
find /ubicacion/1 /ubicacion/2  -iregex «.*\(wmv\|avi\|mpg\|mkv\)$»
find /ubicacion/1 /ubicacion/2  -iname ‘*.avi’ -o -iname ‘*.mpg’ -o -iname ‘*.wmv’ -o -iname ‘*.mkv’

Nos devolveria alto tal que asi

/ubicacion/1/archivo124.mpg
/ubicacion/1/directorio3/archivo344.avi
/ubicacion/2/archivo12.mpg
/ubicacion/2/directorio7/archivo45.mkv

Ahora otra vez, si queremos lucirnos y aprovechar la potencia de los parámetros y de las tuberias, podriamos genernos una lista numerada con el nombre de los archivos encontrados. Explicado por pasos sería :

– agregamos parámetro  -printf  ‘%f\n’ Esto devolveria algo tal que asi:

archivo124.mpg
archivo344.avi
archivo12.mpg
archivo45.mkv

– Ahora hacemos uso de tuberia y usamos el awk de la siguiente manera : | awk ‘{print FNR «\t» $0}’. Esto nos imprime la lista numerada (FNR), tabulación («\t»), y el nombre del fichero ($0). Devolvería el siguiente resultado

1         archivo124.mpg
2         archivo344.avi
3         archivo12.mpg
4         archivo45.mkv

– Ya si queremos rizar el rizo, y no queremos mostrar las extensiones, y mostrar solo el nombre del fichero, podriamos cambiar la anterior tubería, por esta otra:  | awk ‘{gsub(/\.(avi|mpg|wmv|mkv)$/,» «);print FNR «\t» $0}’  .Resultando:

1         archivo124
2         archivo344
3         archivo12
4         archivo45

 

 —ACTUALIZADO (08-01-2014)

Mi amigo y compañero Hernán me pedía si se hacer una copia solo de los ficheros de imagen (concretamente jpg) de una estructura de ficheros con varias carpetas anidadas y copiarlo en destino con la misma estructura de carpetas. Pues bueno hemos utilizado el comando find para realizar esto, sería tal que así:

find /media/Datos -type d -exec mkdir -p «temporal/{}» \;
Aquí recreamos la estructura de directorios, haciendo una búsqueda de directorios en origen y creándolos en el destino.
find /media/Datos -iname «*.jpg»  -exec cp -v «{}» «temporal{}» \;
#Aquí por fin realizamos la copia de los fichero buscando previamente los que cumplen la condición y ya copiándlos a destino.

 

 

 

Loading...
Loading...