¿Cuál sería la mejor manera de enumerar 100 primeros archivos en un directorio ordenado por la marca de tiempo creada (la más antigua primero)? El directorio es bastante grande (alrededor de 100000 archivos).
Se llega a la cabeza y lleva mucho tiempo completarlo.
Editar:
- El sistema de archivos es ext3.
- limitar el número de archivos en la carpeta no vale la pena, ya que esta será una operación de "limpieza" rara y los archivos son generados por un software de terceros.
- Usar el tiempo modificado del archivo , en lugar del tiempo de creación, proporciona una solución aceptable.
find -mtime +<number of days> -delete
limpiar todos los archivos anteriores a cierta edad. Eso significará que no es necesario ningún tipo.Respuestas:
Usted dice que " ls hilo a la cabeza lleva un tiempo tremendamente largo al completo".
La causa de esto no es
ls
, sino la cantidad de archivos en su directorio. Si tiene 100,000 archivos en un solo directorio, cualquier forma de resolver este problema tendría que obtener información sobre todos los 100,000 archivos antes de siquiera pensar en ordenarlos o imprimir cualquier salida.Si tarda demasiado, la solución real es dividir los archivos en varios directorios.
Si no puede distribuir los archivos en varios directorios, ¿hay alguna forma de reducir el número de archivos a considerar ? por ejemplo, si los nombres de los archivos incluyen una fecha, tal vez pueda incluir un comodín para que el sistema no tenga que ordenar 100,000 archivos. ¿O tal vez están numerados secuencialmente? (Esto puede o no ayudar, pero vale la pena intentarlo).
¿Cuántas veces intentas hacer esto? Tal vez valga la pena guardar / almacenar en caché la salida para su reutilización .
Ahora una pregunta.
¿Estás seguro de que quieres decir "tiempo de creación" y no "tiempo de cambio" ? La mayoría de las herramientas solo pueden mostrar "tiempo de cambio", no "tiempo de creación".
Obtener el "tiempo de creación" es algo muy nuevo, que requiere un sistema de archivos ext4 y algunas herramientas que no son fáciles de instalar.
Si quieres cambiar el tiempo
El tiempo de cambio (ctime para abreviar) significa el tiempo que los atributos del archivo cambiaron por última vez.
ls -c
ordena por ctime.Desea la salida en orden ascendente, no descendente, por lo que también debe invertir la salida con la
-r
opción.Entonces podrías hacerlo así:
Una solución más larga al mismo problema usando
stat
:pero eso corre más lento que
ls -cr
en mi sistema.Si quieres tiempo de modificación
El tiempo de modificación (mtime para abreviar) significa el tiempo que el contenido del archivo cambió por última vez.
ls -t
ordena por mtime.Cambiar
ls -cr
als -tr
(mejor opción) o cambiarstat -c $'%Z\t%n'
astat -c $'%Y\t%n'
.Si necesitas tiempo de creación
(Crtime para abreviar)
Esto es mas dificil.
Primero, asegúrese de que el directorio esté en un sistema de archivos que esté formateado con
ext4
. Puedes usartune2fs -l <device name>
para verificar esto.Luego, hay un nuevo
stat
formato llamado%W
, que puede ayudarlo aquí. Para obtenerlo, deberá descargar una versión de GNU Coreutils lanzada en octubre de 2010 o posterior, extraerla, compilarla e instalarla.Luego, dependiendo de su núcleo, esto podría funcionar (no lo he probado).
Ver también:
Si recibe errores sobre
"'$\t'
La
'$\t'
notación requierebash
ozsh
: no funcionará endash
osh
en Ubuntu. Si realmente necesita usar esos proyectiles, tendrá que cambiar alguna\t
a Ctrl+ V, Taby quitar el líder$
de justo antes de la cita de apertura.fuente
Otra forma si se descubre que hacer las cosas hoy podría ser relevante para sus problemas de rendimiento:
En teoría, eso debería comenzar a producirse mucho más rápido, pero supongo que depende de dónde provenga el retraso. Podría tomar
ls
mucho tiempo ordenar los archivos.fuente
head
en realidad sale tan pronto como haya leído suficiente entrada. Intenta correr con ambostime
en la parte delantera. Lahead
versión es mucho más rápida en mi sistema de todos modos.