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í:
ls -cr | head -n 100
Una solución más larga al mismo problema usando stat
:
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%Z\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
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
a ls -tr
(mejor opción) o cambiar stat -c $'%Z\t%n'
a stat -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 usar tune2fs -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).
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%W\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
Ver también:
Si recibe errores sobre "'$\t'
La '$\t'
notación requiere bash
o zsh
: no funcionará en dash
o sh
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.
find -mtime +<number of days> -delete
limpiar todos los archivos anteriores a cierta edad. Eso significará que no es necesario ningún tipo.