Lista de archivos + ruta del directorio ordenados recursivamente por tiempo de acceso

Lista de archivos + ruta del directorio ordenados recursivamente por tiempo de acceso

Estoy haciendo un script LRU, pero después de 20 horas trabajando en él, tengo un problema con el modo recursivo que no puedo solucionar.

Sólo necesito un comando que me muestre los archivos ordenados por tiempo de acceso (--time=atime); Yo también quiero gestionar la profundidad, pero si no puedo, también está bien.

  • Directorio principal:
    • Archivo 1
    • Directorio 1 :
      • Archivo 1
      • Archivo2
      • Subdirección 1:
        • archivo1
        • archivo 2
    • Directorio 2 :
      • Archivo 1
      • Archivo 2
      • Subdirección 2:
        • archivo 1
        • archivo 2
        • subdirectorio 3:
          • archivo 1

Quiero excluir el directorio, simplemente ordenar los archivos por tiempo de acceso

como

/Directorio principal/Directorio 1/archivo 1

/Directorio principal/Archivo 1

/Directorio principal/Directorio 1/Subdirectorio 1/archivo 2

/Directorio principal/Directorio 2/Subdirectorio 2/subdirectorio 3/archivo 1

etc..

Respuesta1

Hay seis herramientas muy utilizadas para resolver problemas similares:

  • find, para buscar archivos o directorios que coincidan con entradas específicas.

    Las opciones -mindepthy -maxdepthcontrolan la profundidad del árbol del sistema de archivos (en relación con los nombres especificados, que siempre están en la profundidad 0) en la que funcionará el comando.

    La -typeopción es útil para restringir la consideración a archivos, directorios, enlaces simbólicos o dispositivos.

    La -printfopción es extremadamente útil, ya que hace que el comando imprima la información de los nombres coincidentes (elementos del directorio) en el formato deseado. Me gusta particularmente %TY%Tm%Td %TT %p\n, que imprime la fecha y hora de la última modificación, y la ruta completa y el nombre de cada coincidencia en cada línea, usando el formato YYYYMMDD HH:MM:SS.sss PATH. Este formato se ordena correctamente, como ve. Para el último acceso, use %AY%Am%Ad %AT %p\n, pero tenga en cuenta que las marcas de tiempo de acceso no se registran en absoluto si noatimese usa la opción de montaje, o si relatimese usa la opción de montaje, las marcas de tiempo de acceso solo se modifican para el primer acceso después de una modificación; Por lo tanto, la comprobación utilizada menos recientemente no es fiable. (Sin embargo, la lista de modificaciones menos recientes es bastante confiable; los usuarios pueden modificar las marcas de tiempo manualmente, pero por lo demás se mantienen automáticamente).

  • sortpara ordenar la salida.

    Las opciones -d, -g, -h, -My -ndefinen cómo se comparan los elementos y la -Ropción hace que el orden sea aleatorio.

    La -ropción se puede utilizar para invertir el orden de clasificación (se utiliza además de una de las opciones anteriores).

    La -topción redefine cómo se definen los campos (columnas); De forma predeterminada, los espacios en blanco (espacios y tabulaciones) separan las columnas.

    La -kopción se puede utilizar para definir qué parte de cada línea se considera la clave de clasificación; de forma predeterminada, se considera toda la línea.

  • uniqse usa a menudo después de ordenar para combinar varios elementos consecutivos en uno, de modo que solo se generen las líneas únicas.

  • cutes la forma más sencilla de seleccionar solo columnas específicas de cada línea en la salida.

    La -fopción elige los campos a imprimir. (De forma predeterminada, se imprimen líneas con como máximo un campo (sin separadores); la opción -ssuprime la impresión de dichas líneas).

    La -dopción se puede utilizar para redefinir la definición de un campo; de forma predeterminada, los espacios en blanco separan los campos.

  • sedes un potente editor de secuencias, que se aplicaexpresiones regularesa la entrada, filtrándola y modificándola según sea necesario.

  • awkes un intérprete del idioma awk. Los scripts Awk son básicamente colecciones decomportamiento, fragmentos de código que se ejecutan para cada línea (o antes o después de todo el procesamiento, o si la línea (o registro) coincide con alguna regla).

Este problema en particular se puede resolver usando tres de los comandos anteriores en una canalización simple: utilícelo findpara buscar archivos en las profundidades deseadas del árbol, imprimiendo una fecha y hora ordenables para cada archivo, además de la ruta relativa al archivo; ordenar la salida; elimine la parte de fecha y hora de cada línea, dejando solo la ruta relativa a cada archivo en cada línea.

Respuesta2

El método más sencillo con diferencia es utilizarzsh. Esclasificatorios globalespuede unir y ordenar archivos según su tipo, marcas de tiempo y otras propiedades.

print -lr -- *(.Doa)
print -lr -- **/*(.Doa)

El primer comando imprime los nombres de los archivos normales ( .) en el directorio actual, incluidos los archivos de puntos ( D) ordenados por tiempo de acceso ( oa). El segundo comando enumera archivos en el directorio actual y en sus subdirectorios de forma recursiva.

información relacionada