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
-mindepth
y-maxdepth
controlan 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
-type
opción es útil para restringir la consideración a archivos, directorios, enlaces simbólicos o dispositivos.La
-printf
opció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 formatoYYYYMMDD 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 sinoatime
se usa la opción de montaje, o sirelatime
se 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).sort
para ordenar la salida.Las opciones
-d
,-g
,-h
,-M
y-n
definen cómo se comparan los elementos y la-R
opción hace que el orden sea aleatorio.La
-r
opción se puede utilizar para invertir el orden de clasificación (se utiliza además de una de las opciones anteriores).La
-t
opción redefine cómo se definen los campos (columnas); De forma predeterminada, los espacios en blanco (espacios y tabulaciones) separan las columnas.La
-k
opció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.uniq
se usa a menudo después de ordenar para combinar varios elementos consecutivos en uno, de modo que solo se generen las líneas únicas.cut
es la forma más sencilla de seleccionar solo columnas específicas de cada línea en la salida.La
-f
opción elige los campos a imprimir. (De forma predeterminada, se imprimen líneas con como máximo un campo (sin separadores); la opción-s
suprime la impresión de dichas líneas).La
-d
opción se puede utilizar para redefinir la definición de un campo; de forma predeterminada, los espacios en blanco separan los campos.sed
es un potente editor de secuencias, que se aplicaexpresiones regularesa la entrada, filtrándola y modificándola según sea necesario.awk
es 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 find
para 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.