Ariana, parte de nuestro equipo de trabajo, nos hizo el favor de redactar este escrito porque conoce a la perfección el tema.
Solución:
Esto funciona (actualizado para incorporar la sugerencia de Daniel Andersson):
find -type f -printf '%T+ %pn' | sort | head -n 1
Este es un poco más portátil y porque no depende de GNU find
extensión -printf
por lo que también funciona en BSD / OS X:
find . -type f -print0 | xargs -0 ls -ltr | head -n 1
El único inconveniente aquí es que está algo limitado al tamaño de ARG_MAX
(cual deberían ser irrelevante para la mayoría de los núcleos más nuevos). Entonces, si hay más de getconf ARG_MAX
caracteres devueltos (262,144 en mi sistema), no le da el resultado correcto. Tampoco es compatible con POSIX porque -print0
y xargs -0
no lo es
Algunas soluciones más a este problema se describen aquí: ¿Cómo puedo encontrar el archivo más reciente (más nuevo, más antiguo, más antiguo) en un directorio? – Wiki de Greg
Se garantiza que los siguientes comandos funcionan con cualquier tipo de nombre de archivo extraño:
find -type f -printf "%T+ %p " | sort -z | grep -zom 1 ".*" | cat
find -type f -printf "%[email protected] %T+ %p " |
sort -nz | grep -zom 1 ".*" | sed 's/[^ ]* //'
stat -c "%y %n" "$(find -type f -printf "%[email protected] %p " |
sort -nz | grep -zom 1 ".*" | sed 's/[^ ]* //')"
Usando un null byte (