Hola a todos.
A la hora de buscar archivos o directorios en un entorno de mil, digamos, no hay problemas pero cuando el numero de items es de 70.000, 100.000 o mas ¿Cual seria la forma optima de hacerlo?
Estoy usando esta orden shell
find . -type f -name ".epub"
Pero como la cantidad de archivos a analizar es de 60.000 mas o menos, el programa se queda detenido.
¿Existe una forma de buscar e ir entregando parcialmente los datos?
Saludos.
Buscar Y Listar Grandes Cantidades De Archivos Y Directorios
Objetivo: Re: Buscar Y Listar Grandes Cantidades De Archivos Y Directorios
No es que se quede detenido, es que find es un poco quisquilloso con la pregunta
Prueba:
find . -type f -name *.epub
o
locate epub
Prueba:
find . -type f -name *.epub
o
locate epub
Objetivo: Re: Buscar Y Listar Grandes Cantidades De Archivos Y Directorios
He modificado a esto:
find /directorio/de/los/libros -type f -iname "*.epub"
De esta manera funciona muy bien y es rápido. El problema aparece cuando los archivos son muchos.
Hice una prueba con 7.000 y funciono, tardando bastante en devolver los resultados, así que con 70.000 no hice la prueba ya que estimo que demorara muchísimo tiempo.
La cosa va de escanear un directorio y listar los archivos para luego hacer operaciones sobre estos, por ejemplo en caso de musica o libros leer los metadatos. Así que hay dos procesos uno que tiene por finalidad listar archivos y otro que tiene por finalidad "leer" algun dato de estos.
Quisiera hacer algo parecido a lo que hacen los programas como Rhythmbox o Amarok que van escaneando el directorio de música y a medida que encuentra archivos [proceso 1] va leyendo los metadatos [proceso 2].
Como lo tengo montado ahora hasta que no se lista la totalidad de archivos no comienza el otro proceso. Esto es poco eficiente.
Si alguien tiene un método mas eficiente para listar archivos de directorios seria interesante que lo comparta, sobretodo si trabaja bien con grandes cantidades de estos.
Nota: Dejo un programa de estudio en el que puse dos métodos de listado, uno es con Find de shell y otro con Rdir de gambas.
1 - Directorio de búsqueda
2 - Extensión de archivo
3 - Elección entre Find r Rdir
4 - Inicio de busqueda
5 - Mostrando los resultados (con un LCDLabel se muestra la cantidad encontrada)
Saludos.
última edición por tincho el Viernes, 04 Enero 2019, 23:12; editado 1 vez
shordi escribió: [Ver mensaje]
He modificado a esto:
find /directorio/de/los/libros -type f -iname "*.epub"
De esta manera funciona muy bien y es rápido. El problema aparece cuando los archivos son muchos.
Hice una prueba con 7.000 y funciono, tardando bastante en devolver los resultados, así que con 70.000 no hice la prueba ya que estimo que demorara muchísimo tiempo.
La cosa va de escanear un directorio y listar los archivos para luego hacer operaciones sobre estos, por ejemplo en caso de musica o libros leer los metadatos. Así que hay dos procesos uno que tiene por finalidad listar archivos y otro que tiene por finalidad "leer" algun dato de estos.
Quisiera hacer algo parecido a lo que hacen los programas como Rhythmbox o Amarok que van escaneando el directorio de música y a medida que encuentra archivos [proceso 1] va leyendo los metadatos [proceso 2].
Como lo tengo montado ahora hasta que no se lista la totalidad de archivos no comienza el otro proceso. Esto es poco eficiente.
Si alguien tiene un método mas eficiente para listar archivos de directorios seria interesante que lo comparta, sobretodo si trabaja bien con grandes cantidades de estos.
Nota: Dejo un programa de estudio en el que puse dos métodos de listado, uno es con Find de shell y otro con Rdir de gambas.
1 - Directorio de búsqueda
2 - Extensión de archivo
3 - Elección entre Find r Rdir
4 - Inicio de busqueda
5 - Mostrando los resultados (con un LCDLabel se muestra la cantidad encontrada)
Saludos.
última edición por tincho el Viernes, 04 Enero 2019, 23:12; editado 1 vez
ejemplo-find-0.0.5.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | ejemplo-find-0.0.5.tar.gz | |
Tamaño: | 12.75 KB | |
Descargado: | 32 veces |
ejemplo-find-0.0.5.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | ejemplo-find-0.0.5.tar.gz | |
Tamaño: | 12.75 KB | |
Descargado: | 32 veces |
ejemplo-find-0.0.5.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | ejemplo-find-0.0.5.tar.gz | |
Tamaño: | 12.75 KB | |
Descargado: | 32 veces |
Objetivo: Re: Buscar Y Listar Grandes Cantidades De Archivos Y Directorios
En base a un post de Julio adapte esto
En esta linea Read #Last, sLine, -80 ¿Que papel juega el -80?
Public strOut As String
Public Sub Button1_Click()
Dim strPath As String
Dim hproc As Process
Dim strExt As String
Dim strComm As String
strPath = "/home/user/epub"
strExt = "epub"
strComm = "find -O3 " & strPath & " -type f -iname \'*." & strExt & "\'"
strOut = ""
Print strComm
hproc = Shell strComm For Read As "salida"
While hproc.State = hproc.Running
Wait 0.1
Wend
File.Save(User.Home &/ "list.txt", strOut)
Wait 0.01
Desktop.Open(User.Home &/ "list.txt")
End
Public Sub salida_Read()
Dim sLine As String
Read #Last, sLine, -80
strOut &= sLine & "\n"
End
Public Sub Button1_Click()
Dim strPath As String
Dim hproc As Process
Dim strExt As String
Dim strComm As String
strPath = "/home/user/epub"
strExt = "epub"
strComm = "find -O3 " & strPath & " -type f -iname \'*." & strExt & "\'"
strOut = ""
Print strComm
hproc = Shell strComm For Read As "salida"
While hproc.State = hproc.Running
Wait 0.1
Wend
File.Save(User.Home &/ "list.txt", strOut)
Wait 0.01
Desktop.Open(User.Home &/ "list.txt")
End
Public Sub salida_Read()
Dim sLine As String
Read #Last, sLine, -80
strOut &= sLine & "\n"
End
En esta linea Read #Last, sLine, -80 ¿Que papel juega el -80?
Objetivo: Re: Buscar Y Listar Grandes Cantidades De Archivos Y Directorios
última edición por Shell el Sabado, 05 Enero 2019, 01:19; editado 1 vez
Tincho:
¿ Cómo es que te tarda tanto ?.
Tienes localizado los libros en un directorio, no tiene que buscarlos por todo el disco.
En mi caso que uso los juegos de Spectrum para practicar temas de archivos que deben ser sobre los 12K,
no tarda demasiado.
Si quieres temporizar el tiempo del comando añade al principio el comando time.
Ejemplo:
Después del listado...
Muestra el tiempo total de ejecución, el que ha sido empleado por el usuario y el sistema.
Aquí muestra lo que preguntas.
READFlujo _Stream_
Saludos
¿ Cómo es que te tarda tanto ?.
Tienes localizado los libros en un directorio, no tiene que buscarlos por todo el disco.
En mi caso que uso los juegos de Spectrum para practicar temas de archivos que deben ser sobre los 12K,
no tarda demasiado.
Si quieres temporizar el tiempo del comando añade al principio el comando time.
Ejemplo:
time find Documentos/Ordenadores/Spectrum/Coleccion/Tzx -name *.tzx
Después del listado...
Citar:
Muestra el tiempo total de ejecución, el que ha sido empleado por el usuario y el sistema.
Citar:
Aquí muestra lo que preguntas.
READFlujo _Stream_
Saludos
última edición por Shell el Sabado, 05 Enero 2019, 01:19; editado 1 vez
Objetivo: Re: Buscar Y Listar Grandes Cantidades De Archivos Y Directorios
Ok, no recordaba esta opción "time", muy útil. Los archivos están en una red así que suele ir lento, bueno por lo menos mas lento que el disco "directo"
Ok, según esto con -1 bastaría para que lea toda la linea completa.
Seria interesante saber que método siguen en los programas de catalogacion de musica o libros , por ejemplo, para gestionar las colecciones.
Saludos.
Shell escribió: [Ver mensaje]
Ok, no recordaba esta opción "time", muy útil. Los archivos están en una red así que suele ir lento, bueno por lo menos mas lento que el disco "directo"
Citar:
Ok, según esto con -1 bastaría para que lea toda la linea completa.
Seria interesante saber que método siguen en los programas de catalogacion de musica o libros , por ejemplo, para gestionar las colecciones.
Saludos.
Objetivo: Re: Buscar Y Listar Grandes Cantidades De Archivos Y Directorios
Tincho:
Ahora entiendo. A lo mejor usar Find no es lo ideal.
El problema principal es controlar los cambios de los archivos si se producen. Si se añaden, si se borran, actualizar esos cambios.
Desde luego la base de datos no hay quien se la quite.
Hace años, cuando usaba el msdos, no me acuerdo que antivirus usaba, puede que el Mcafee. Este creaba en cada directorio un archivo
que debía ser como una comprobación de cada archivo por si algo lo alteraba.
Si tuviéramos un volumen de información controlada y añadiéramos algo nuevo. Podíamos controlar cuales son esos cambios.
Supongo que antes de añadir la nueva información a la anterior. Puede que sea la forma más practica.
¿ Qué te parece el comando diff ?.
https://enavas.blogspot.com/2008/03...mando-diff.html
Jugar con listas de archivos y ver los cambios producidos.
Saludos
Citar:
Ahora entiendo. A lo mejor usar Find no es lo ideal.
El problema principal es controlar los cambios de los archivos si se producen. Si se añaden, si se borran, actualizar esos cambios.
Desde luego la base de datos no hay quien se la quite.
Hace años, cuando usaba el msdos, no me acuerdo que antivirus usaba, puede que el Mcafee. Este creaba en cada directorio un archivo
que debía ser como una comprobación de cada archivo por si algo lo alteraba.
Si tuviéramos un volumen de información controlada y añadiéramos algo nuevo. Podíamos controlar cuales son esos cambios.
Supongo que antes de añadir la nueva información a la anterior. Puede que sea la forma más practica.
¿ Qué te parece el comando diff ?.
https://enavas.blogspot.com/2008/03...mando-diff.html
Jugar con listas de archivos y ver los cambios producidos.
Saludos
Objetivo: Re: Buscar Y Listar Grandes Cantidades De Archivos Y Directorios
Si cada vez que hay listadas , digamos, 1000 entradas, se pudiera pausar el comando find, seria ideal porque permitiría derivar esos datos a un archivo o una lista de proceso y hacer alguna tarea.
La parte mas pesada seria al principio, ya que habría que agregar todas las "entradas" a la lista luego find permite indicar que se listen los archivos que han cambiado o han sufrido un acceso en un lapso de tiempo especifico.
Saludos.
Shell escribió: [Ver mensaje]
Si cada vez que hay listadas , digamos, 1000 entradas, se pudiera pausar el comando find, seria ideal porque permitiría derivar esos datos a un archivo o una lista de proceso y hacer alguna tarea.
La parte mas pesada seria al principio, ya que habría que agregar todas las "entradas" a la lista luego find permite indicar que se listen los archivos que han cambiado o han sufrido un acceso en un lapso de tiempo especifico.
Saludos.
Página 1 de 1
No puede crear mensajesNo puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario
Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.
Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo
Página generada en:: 0.4099s (PHP: -74% SQL: 174%)
Consultas SQL: 48 - Debug off - GZIP Activado