-1 votos

¿Cómo mostrar la última fecha modificada de cualquier archivo debajo de un directorio determinado?

Como se muestra en este orden cronológico inverso que enumera el último archivo o subdirectorio de '.' fue modificado el 12 de abril, pero la fecha de modificación que se muestra en el directorio en sí es el 17 de abril. Necesitaría enumerar las entradas de carpetas basadas en la última fecha de modificación de cualquiera de los archivos dentro de ellas (los directorios podrían ser complicados...). ¿Es posible hacerlo?

$ ls -lrta ../hercl.src
..
drwxr-xr-x   9 steve  staff    288 Mar  8 07:48 .idea
drwxr-xr-x  15 steve  staff    480 Apr 12 16:40 .git
drwxr-xr-x  24 steve  staff    768 Apr 17 12:16 .    ## Newer than latest file modified date..
                  
So the "ask" would be to return April 12 not April 17th.

0voto

javadba Puntos 321

Escribí una utilidad para descender subdirectorios y extraer la fecha más reciente de un archivo modificado y luego usar esa fecha para representar el directorio ancestro general.

#!/usr/bin/env python
import sys
def lsd(fname):
    def lsdRec(fname):
        from pathlib import Path
        from operator import itemgetter
        import os
        fpath = Path(fname)
        fs = list(fpath.glob('*'))
        if not fs:
            return []
        else:
            def getLast(lst): 
                x = lst[-1] if lst else [None,0]
                return x

            def getModified(fpath):
                try:
                    return os.path.getmtime(str(fpath.resolve()))

                except Exception as e:
                    print(f"Error on {fpath}: {e}")
                    return 0

            fl = sorted([ getLast(lsdRec(f)) if f.is_dir() 
                else [f,getModified(f)] for f in fs],key=itemgetter(1))
            return fl
    rst = lsdRec(fname)
    from datetime import datetime
    outLst = ([ [ str(x[0])[len(str(fname))-1:], 
        datetime.fromtimestamp(x[1]).strftime('%Y-%m-%d %H:%M:%S')] for x in rst])
    out = '\n'.join(['\t'.join([x[1],x[0]]) for x in outLst])
    return out

if len(sys.argv) < 2:
    print(f"sys.argv {sys.argv}")
    print("""
Usage: lsd <directory>

Prints the files and subdirectories according to last modified date of contents
""")
    sys.exit(1)

dir=sys.argv[1]
print(lsd(dir))

La salida muestra el archivo dentro de cada subdirectorio que tiene la fecha modificada más reciente. Así que la salida muestra toda la ruta incluyendo subdirectorios. ¡Me gusta esto!

2022-03-07 16:40:48 x/hercl-0.3.2/setup.cfg
2022-04-20 16:15:25 x/y/z/zz/thereThere

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X