Después de investigar con especialistas en este tema, programadores de diversas áreas y profesores dimos con la respuesta al dilema y la plasmamos en esta publicación.
Solución:
Una opción: use GNU find para recorrer todos los archivos; imprime la marca de tiempo con la ruta del archivo y ordena por fecha:
find /path/mydir -type f -printf "%T+t%pn" | sort | tail -1
Solo para la marca de tiempo de la época,
find /path/mydir -type f -printf "%[email protected]n" | sort | tail -1
Dadas las etiquetas de linux y bash, así como la especificación “linux bash” en la pregunta, aquí hay una función específica de bash que generará tanto el nombre del archivo como la marca de tiempo del archivo modificado más recientemente en una estructura de directorio dada:
function lastmodified () (
shopt -s globstar
latest=
t=0
for f in "$1"/**
do
x=$(stat -c "%Y" "$f")
if [ $x -gt $t ]
then
latest="$f"
t="$x"
fi
done
printf "%sn" "$latest"
printf "%sn" "$(date -d @$t)"
)
Úsalo como: lastmodified /path/mydir
.
Se ejecuta en un subshell para aislar la opción de shell globstar, así como las diversas asignaciones de variables. Cambie o elimine las instrucciones printf para capturar los datos que le interesan.
Funciona pidiéndole a bash que expanda todas las rutas de nombre de archivo bajo el $1
luego verifica el “Tiempo de la última modificación como segundos desde Época” con el comando stat. El nombre de archivo más reciente terminará en $latest
y su marca de tiempo en t
.
Asegúrese de que zsh esté instalado (todas las principales distribuciones tienen un paquete para ello).
zsh -c 'ls -log **/*(.om[1])' | awk 'print $4, $5, $6'
**/*
es un patrón comodín para hacer coincidir todos los archivos en subdirectorios de forma recursiva y
(.om[1])
son calificadores globales para limitar las coincidencias a archivos regulares (.
), ordenar por tiempo de modificación (om
) y mantener solo el archivo más reciente ([1]
). Los calificadores globales son una característica única de zsh y gran parte de su funcionalidad, en particular la clasificación, es difícil de reproducir en otros shells.
Solo incluyo archivos regulares porque esto es a menudo lo que se necesita, pero es posible que desee eliminar el .
calificador si desea que la marca de tiempo refleje la última vez que se eliminó un archivo, por ejemplo.
GNU ls tiene una opción para controlar el formato de hora (--time-style
). Tenga en cuenta que, según el formato de hora, es posible que deba ajustar el posprocesamiento para extraer el campo de hora.
Alternativamente, puede usar Linux stat
comando o zsh stat
incorporado para imprimir la marca de tiempo en el formato deseado.
zsh -c 'zmodload zsh/stat; stat +mtime -- **/*(.om[1])'
Aquí puedes ver las comentarios y valoraciones de los lectores
Si aceptas, eres capaz de dejar una división acerca de qué te ha gustado de este tutorial.