¿Cómo puedo obtener la lista de todos los archivos en el directorio actual junto con su fecha de modificación y ordenados por esa fecha?
Ahora sé cómo lograr eso con find
, stat
y sort
, pero por alguna extraña razón, stat
no está instalado en la caja y es poco probable que pueda instalarlo.
¿Alguna otra opción?
PD: gcc
tampoco está instalado
find
-printf
embargo, la acción parece ser la más fácil.Respuestas:
Mi método más corto usa zsh:
(agregue los
D
calificadores glob si también desea enumerar los archivos ocultos o los archivos en directorios ocultos).Si tiene GNU find, haga que imprima los tiempos de modificación del archivo y ordene por eso. Supongo que no hay nuevas líneas en los nombres de archivo.
Si tiene Perl (nuevamente, suponiendo que no haya nuevas líneas en los nombres de archivo):
Si tiene Python (nuevamente, suponiendo que no haya nuevas líneas en los nombres de archivo):
Si tiene acceso SSH a ese servidor, monte el directorio sobre sshfs en una máquina mejor equipada:
Con solo las herramientas POSIX, es mucho más complicado, porque no hay una buena manera de encontrar el tiempo de modificación de un archivo. La única forma estándar de recuperar los tiempos de un archivo es
ls
, y el formato de salida depende del entorno local y es difícil de analizar.Si puede escribir en los archivos, y solo le importan los archivos normales, y no hay nuevas líneas en los nombres de los archivos, aquí hay un error horrible: cree enlaces duros a todos los archivos en un solo directorio y ordénelos por hora de modificación.
fuente
find . -print | xargs -n99999 -s999999 ls -ltr
. Pero eso tiene el problema de que (1)xargs
puede no permitir-m
más de 512 o-s
más de 5120, y (b) incluso si puede evitar eso, todavía hay un tamaño máximo impuesto por el núcleo de la lista de argumentos combinados y el entorno. La mayoría de sus ideas (excepto las de Perl y Python) tienen el mismo problema, por lo que evité específicamente construir líneas de comando largas.zsh
globos recursivos en el caso general.print -rl **/*
, el único límite es la cantidad de memoria libre que tiene), y más allá de eso hayzargs
. Su propuesta defind … | xargs … ls
se ordenará correctamente sixargs
termina invocandols
solo una vez, y no funcionará si hay caracteres especiales en los nombres de archivo.Asumiendo GNU
find
:Cambie
1n,1
a1nr,1
si desea que los archivos enumerados sean los más recientes primero.Si no tiene GNU,
find
se vuelve más difícil porquels
el formato de marca de tiempo varía mucho (los archivos modificados recientemente tienen un estilo diferente de marca de tiempo, por ejemplo).fuente
ls --time-style="..."
: no estoy seguro de si esto es estándar o GNU ls, probablemente GNU.ls
no tiene esa opción.En una Mac no hay ningún argumento -printf para encontrar, pero puede hacerlo en su lugar:
find . -print0 | xargs -0 -n 100 stat -f"%m %Sm %N" | sort -n|awk '{$1="";print}'
fuente
uno puede probar esto (sin embargo, hay que construirlo uno mismo) https://github.com/shadkam/recentmost
fuente
Ignorar archivos ocultos - con sello de tiempo agradable y rápido
Maneja bien los espacios en los nombres de archivo, ¡no es que debas usarlos!
Se
find
puede encontrar más en abundancia siguiendo el enlace.fuente
Hablando en general de encontrar archivos por fecha (esto no funcionará para el póster original, pero terminé aquí, así que pensé que otros también podrían hacerlo). En mi caso de uso, quiero enumerar los archivos con el fin de revisarlos antes de eliminarlos.
Con findutils 4.6.0 me gusta:
El comando anterior busca archivos (
-type f
), en el directorio de trabajo actual (.
) que se modificaron hace más de 270 días (-mtime +270
también-mtime 0
producirá las últimas 24 horas y-mtime -5
muestra los últimos 5 días). Luego se usals
para enumerarlos por fecha, el más nuevo primero (-exec ls -laFGht --time-style=iso {} \+
)Aquí hay una muestra de la salida:
Lo mejor de esto es que una vez que la lista ha sido revisada, es simple reemplazar la parte de la lista con el
find
comando eliminar:fuente