Buscando un comando que devolverá el archivo más reciente en un directorio.
No ver un parámetro de límite para ls...
linux
command-line
ack
fuente
fuente

watch -n1 'ls -Art | tail -n 1'- muestra los últimos archivoslso el usofindsin el-print0cual es problemático para manejar nombres de archivos molestos. Siempre es útil mencionar: BashFAQ099 que da una respuesta POSIX a este problemaRespuestas:
No muy elegante, pero funciona.
fuente
lsatail, luego imprime solo la última línea. En mi humilde opinión, es mejor ordenar en orden ascendente y utilizarheaden su lugar, como sechaossugiere. Después de imprimir la primera línea, el encabezado se cierra, por lo que enviar la siguiente línea (en realidad el siguiente bloque) generará un SIGPIPE y también selscerrará.Este comando realmente proporciona el último archivo modificado en el directorio de trabajo actual.
fuente
ls -tl | head -n 1, y no tiene que empujar toda la tabla a través de la tubería como lo hace la mía.ls -t *.png | head -n1ls -Art | head -n1si desea específicamente el archivo modificado más recienteEsta es una versión recursiva (es decir, encuentra el archivo actualizado más recientemente en un directorio determinado o en cualquiera de sus subdirectorios)
Editar: usar en
-f 2-lugar de-f 2lo sugerido por Kevinfuente
find $DIR -type f -exec stat -lt "%Y-%m-%d" {} \+ | cut -d' ' -f6- | sort -n | tail -1sort -nr, puede usar enhead -n 1lugar detail -n 1mejorar ligeramente la eficiencia. (Aunque si está ordenando un hallazgo recursivo, obtener la primera o la última línea no será la parte lenta).find ./ -type f -printf "%T@ %p\n" -ls | sort -n | cut -d' ' -f 2- | tail -n 1 | xargs -r ls -lahfind $DIR -type f -exec stat -lt "%F %T" {} \+ | cut -d' ' -f6- | sort -n | tail -1Una nota sobre confiabilidad:
Dado que el carácter de nueva línea es tan válido como cualquier otro en un nombre de archivo, cualquier solución que se base en líneas como las
head/tailbasadas son defectuosas.Con GNU
ls, otra opción es usar la--quoting-style=shell-alwaysopción y unabashmatriz:(agregue la
-Aopciónlssi también desea considerar los archivos ocultos).Si desea limitarse a archivos normales (ignorar directorios, fifos, dispositivos, enlaces simbólicos, sockets ...), deberá recurrir a GNU
find.Con bash 4.4 o posterior (para
readarray -d) y GNU coreutils 8.25 o posterior (paracut -z):O recursivamente:
Lo mejor aquí sería usar
zshy sus calificadores globales en lugar debashevitar toda esta molestia:El archivo regular más nuevo en el directorio actual:
Incluidos los ocultos:
Segundo más nuevo:
Verifique la antigüedad del archivo después de la resolución del enlace simbólico:
Recursivamente:
Además, con el sistema de finalización (
compinity co) habilitado, se Ctrl+Xmconvierte en un completer que se expande al archivo más nuevo.Entonces:
Te haría editar el archivo más nuevo (también tienes la oportunidad de verlo antes de presionar Return).
Para el segundo archivo más nuevo.
para el
carchivo más nuevo .para el archivo regular más nuevo (no directorio, ni fifo / dispositivo ...), y así sucesivamente.
fuente
zshconsejos. ¿Podría proporcionar un enlace a más detalles sobre esto en zsh docs?info zsh qualifiersYo suelo:
ls -ABrt1 --group-directories-first | tail -n1Me da solo el nombre del archivo, excluyendo las carpetas.
fuente
ls -lAtr | tail -1Las otras soluciones no incluyen archivos que comienzan con
'.'.Este comando también incluirá
'.'y'..', que puede o no ser lo que desea:ls -latr | tail -1fuente
Variante en corto basada en la respuesta de dmckee:
fuente
-1sintaxis de head ha quedado obsoleta hace bastante tiempo y-n 1debe usarse.Me gusta
echo *(om[1])(zshsintaxis) ya que solo da el nombre del archivo y no invoca ningún otro comando.fuente
La solución de búsqueda / clasificación funciona muy bien hasta que el número de archivos se vuelve realmente grande (como un sistema de archivos completo). Use awk en su lugar para realizar un seguimiento del archivo más reciente:
fuente
Personalmente, prefiero usar la menor cantidad de
bashcomandos no incorporados que pueda (para reducir la cantidad de costosas bifurcaciones y syscalls de ejecutivos). Para ordenar por fecha selsnecesita llamar. Pero el uso deheadno es realmente necesario. Uso el siguiente one-liner (solo funciona en sistemas que admiten canalizaciones de nombres):o para obtener el nombre del archivo más antiguo
(¡Cuidado con el espacio entre las dos marcas '<'!)
Si los archivos ocultos también son necesarios, se podría agregar un argumento.
Espero que esto pueda ayudar.
fuente
usando la opción recursiva R ... puede considerar esto como una mejora para buenas respuestas aquí
fuente
Mostrará el último elemento modificado en la carpeta. Emparejar
greppara encontrar las últimas entradas con palabras clavefuente
1es para la primera línea equiv ahead -n 1lo que es q?Recursivamente:
fuente
prueba este simple comando
Si desea el nombre del archivo - última modificación, ruta = /ab/cd/*.log
Si desea el nombre del directorio - última modificación, ruta = / ab / cd / * /
fuente
Suponiendo que no le importan los archivos ocultos que comienzan con un
.De otra manera
fuente
Con solo Bash incorporados, siguiendo de cerca BashFAQ / 003 :
fuente
Todas esas soluciones ls / tail funcionan perfectamente bien para archivos en un directorio, ignorando subdirectorios.
Para incluir todos los archivos en su búsqueda (recursivamente), se puede usar find. gioele sugirió ordenar la salida de búsqueda formateada. Pero tenga cuidado con los espacios en blanco (su sugerencia no funciona con espacios en blanco).
Esto debería funcionar con todos los nombres de archivo:
Esto ordena por mtime, mira man find:
Así que simplemente reemplace
%Tcon%Cpara ordenar por ctime.fuente
find $DIR -type f -printf "%T@ %p\n" | sort -n | cut -d' ' -f 2- | tail -n 1O alternativamente, mantenga todos excepto el primer campo:find $DIR -type f -printf "%T@ %p\n" | sort -n | cut -d' ' -f 1 --complement | tail -n 1Encontrar el archivo más actual en cada directorio de acuerdo con un patrón, por ejemplo, los subdirectorios del directorio de trabajo que tienen un nombre que termina con "tmp" (no distingue entre mayúsculas y minúsculas):
fuente
fuente
Si desea obtener el archivo modificado más reciente que también incluye subdirectorios, puede hacerlo con este pequeño oneliner:
Si desea hacer lo mismo no para los archivos modificados, sino para los archivos accedidos, simplemente tiene que cambiar el
% Y parámetro de la stat comando para % X . Y su comando para los archivos accedidos más recientes se ve así:
Para ambos comandos, también puede cambiar el parámetro var = "1" si desea enumerar más de un solo archivo.
fuente
También necesitaba hacerlo, y encontré estos comandos. estos funcionan para mí:
Si desea el último archivo por su fecha de creación en la carpeta (hora de acceso):
Y si desea el último archivo que tiene cambios en su contenido (modificar el tiempo):
fuente