Saltar al contenido

Fecha de última modificación del directorio “recursivo”

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 $latesty 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *