¿Es posible obtener la hora en que se abrió el archivo la última vez y ordenar todos los archivos en un directorio por esas horas?
Esto depende exactamente de lo que quiere decir con "abierto", pero en general, sí. Hay tres marcas de tiempo grabadas normalmente:
mtime- actualizado cuando el contenido del archivo cambia. Este es el tiempo de archivo "predeterminado" en la mayoría de los casos.ctime- actualizado cuando el archivo o sus metadatos (propietario, permisos) cambianatime - actualizado cuando se lee el archivoEntonces, generalmente, lo que quieres ver es el atimede un archivo. Puedes conseguir eso con stato con ls. Puede ls -luhacer esto, aunque prefiero usarlo ls -l --time=atime(que debería ser compatible con casi todas las distribuciones modernas de Linux) porque no lo uso a menudo, y cuando lo hago, puedo recordarlo mejor. Y para ordenar por tiempo, agregue la -tbandera a ls. Ahí vas.
Sin embargo, hay una gran advertencia. La actualización de atime cada vez que se lee un archivo provoca una gran cantidad de E / S generalmente innecesarias, lo que ralentiza todo. Por lo tanto, la mayoría de las distribuciones de Linux ahora tienen por defecto la noatimeopción de montaje del sistema de archivos, que básicamente mata a veces, o bien relatime, que solo actualiza a veces una vez que ha pasado un límite (normalmente una vez al día) o si el archivo se modificó realmente desde la lectura anterior. Puede encontrar si estas opciones están activas ejecutando el mountcomando.
Además, tenga en cuenta que los tiempos de acceso son por inodo, no por nombre de archivo, por lo que si tiene enlaces duros, leer uno actualizará todos los nombres que se refieren al mismo archivo.
Y tenga en cuenta que c no es "creación"; la creación no es rastreada por los sistemas de archivos Unix / Linux, lo que parece extraño pero en realidad tiene sentido porque el sistema de archivos no tiene forma de saber si es el original; tal vez el archivo fue creado hace cuarenta años y se copió aquí. Y, de hecho, muchos editores de archivos trabajan haciendo copias sobre el original. Si necesita esa información, es mejor usar un sistema de control de versiones como git.
mountmanual actualizada .lsacorta el tiempo por defecto a una precisión razonable. Para ver el tiempo con total precisión se puede usar--full-time.ls -ltuenumera todos los archivos, mostrando y ordenando por tiempo de acceso.De
man ls:fuente
El
findcomando es el mejor para esto. Ver-ctime,-mtimey-atimeopcionesfuente
Si su listado es para consumo humano, úselo
lscon uno de los indicadores de clasificación de fecha (-tupara el tiempo de acceso (lectura), solo-tpara el tiempo de modificación (escritura) o-tcpara el tiempo de cambio de inodo). Consulte la respuesta de mattdm para obtener más información (en particular, la advertencia-ay la definición de-c).Si esto es para el consumo del programa, analizar la salida de
lses problemático . Si su shell es zsh, no necesita delstodos modos: zsh tiene calificadores globales para ordenar las coincidencias aumentando el tiempo de acceso (*(Oa)), cambio de inodo (*(Oc)) o modificación (*(Om)). Unotipo minúsculo al aumentar la edad.De lo contrario, si sabe que los nombres de archivo no contienen ninguna línea nueva o caracteres no imprimibles (en la configuración regional actual), puede hacer algo como
Si desea invocar un comando en muchos archivos a la vez, necesita más configuración. Tenga en cuenta que
act_on_files_by_date $(ls -t)no funciona así, ya que los nombres de archivo que contienen caracteres comodín o espacios en blanco se ampliarían en el resultado de la sustitución del comando. El siguiente código funciona siempre que ningún nombre de archivo contenga una nueva línea o un carácter no imprimible:Si desea hacer frente a nombres de archivo arbitrarios, tendrá dificultades para recurrir a herramientas más potentes que un shell estándar: zsh, perl, python ...
fuente