systemadmin.es > Storage > Sistemas de ficheros > Buscar el fichero más reciente

Buscar el fichero más reciente

Dada una estructura de directorios no nos vale hacer sólo un ls -rt para buscar el fichero más reciente. Vamos a ver porqué y como hacerlo correctamente.

Primero de todo vamos a crear un directorio y mediante touch cambiamos la fecha de modificación del directorio a 1984:

$ mkdir 1984
$ touch -t 198410110000 1984/

Podemos ver la fecha modificada con un ls:

$ ls -l
total 4
drwxr-xr-x 2 rut rut 4096 Oct 11  1984 1984

Si creamos un fichero dentro de este directorio veremos como se actualiza la fecha de modificación:

$ touch 1984/a
$ ls -l
total 4
drwxr-xr-x 2 rut rut 4096 Oct 27 09:09 1984

Podemos crear un directorio dentro de éste y volver a dejar la fecha a 1984 con touch:

$ mkdir 1984/b
$ touch -t 198410110000 1984/

A continuación si creamos un fichero dentro de este segundo directorio veremos como la fecha de modificación no se actualiza:

$ touch 1984/b/c
$ ls -l
total 4
drwxr-xr-x 3 rut rut 4096 Oct 11  1984 1984

Esto es lógico porque estamos modificando el segundo directorio para añadir una entrada más, pero en el primero (con fecha de 1984) no lo hemos tocado. Por lo tanto, para saber dentro de una estructura de directorios compleja el fichero más reciente deberemos usar otros métodos. Por ejemplo con find:

$ find $i -type f -printf "%TY-%Tm-%Td %TT %p\n" | sort -r | head -n1

6 comments to “Buscar el fichero más reciente”

  1. Hola, no sé si es el lugar idóneo para hacerte una pregunta: ¿Sabes cómo puedo borrar recursivamente en directorios y subdirectorios, todos los ficheros, por ejemplo .bak, de un servidor ftp?. Gracias.

    Nota: No tengo acceso SSH con una terminal, tan sólo puedo usar clientes ftp.

  2. Para esto es mejor usar el foro, pero de buenas a primeras se me ocurre usar lftp para obtener el listado y luego filtrar con grep para luego mandar los comandos uno a uno con un for

  3. Hola,

    Tambien hay opciones de find como -mtime, -mmin ó -newer para ese tipo de cosas, según la versión de OS que se esté usando.

    Muy bueno el articulo.

    Saludos.

  4. Las opciones como -mtime es para multiplos de 24h y el caso del -newer es para cuando necesitas comparar.

    Cada opción tiene una aplicación diferente depende del caso

  5. hola, me gusta mucho tu site
    podrias orientarme? necesito un script para copiar de una carpeta solamente archivos que tenga una cierta fecha.

    hice un pequeño script con ls grep y awk y filtre por fecha (mes, dia) pero no me termina de servir porque no tiene en cuenta el año-

    que comandos puedo usar? muchas gracias

  6. Hola,
    Podrías restringir con -mtime por delante y por detrás. Por ejemplo, para un fichero de hace 5 días:

    $ date
    Wed Feb 16 06:35:43 CET 2011
    $ find . -type d -mtime -6 -not -mtime -5 -ls
    8012661    4 drwxr-xr-x   2 root     root         4096 Feb 11 00:00 ./11
    

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>