GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo ordenar los resultados de la declaración Buscar por fecha?

obtener solo nombres de archivos... ordenados por día de modificación

find + sort + cut enfoque:

find . -regex ".*/[0-9.]+" -printf "%[email protected] %f\n" | sort | cut -d' ' -f2
  • %[email protected] - Hora de la última modificación del archivo, donde @ es segundos desde Jan. 1, 1970, 00:00 GMT, con parte fraccionaria

  • %f - Nombre del archivo con los directorios principales eliminados (solo el último elemento)

Para ordenar en orden descendente:

find . -regex ".*/[0-9.]+" -printf "%[email protected] %f\n" | sort -k1,1r | cut -d' ' -f2

Su método se puede adaptar para trabajar en casos simples. El principal problema al que te enfrentas es que estás pasando input a ls , pero ls no toma ninguna entrada. ls toma argumentos de línea de comando. Entonces necesitas pasar la salida de find como argumentos a ls , con una sustitución de mando. Además, en caso de que coincida un directorio, pase -d a ls para enumerar el directorio en sí y no su contenido.

OLDDATA=$(ls -td $(find . -regex ".*/[0-9.]+"))

Solo en casos simples, porque hay dos restricciones:

  1. Esto se basa en una sustitución de comando sin comillas (al igual que el uso de $OLDDATA después). Por lo tanto, asume que los nombres de los archivos no contienen ningún carácter especial (espacios en blanco o caracteres comodín \[*? ).
  2. Algunas versiones de ls puede alterar los caracteres que no se pueden imprimir en la configuración regional actual.
  3. Si la longitud total de los nombres de los archivos es demasiado larga, obtendrá un error. (Tenga en cuenta que find … -exec y xargs no puedo ayudar aquí, ya que ls debe ejecutarse una sola vez para obtener el orden correcto de los nombres de los archivos. Todo lo que podrían hacer es ocultar errores y generar resultados que no estén ordenados correctamente, y alterar algunos caracteres más, en el caso de xargs .)

Una forma robusta y simple de hacer esto es usar zsh. Tiene la capacidad de ordenar las coincidencias con comodines, gracias a los calificadores globales.

setopt extended_glob
OLDDATA=(**/[0-9.]##(om))
  • Dado que esto no llama a ningún otro programa, no hay límite de longitud aparte de la memoria disponible, y no hay riesgo de que se altere el nombre del archivo en ningún momento.
  • El resultado es una lista de cadenas (cada cadena es un nombre de archivo), no una cadena, por lo que entra en una variable de matriz.
  • **/ atraviesa subdirectorios recursivamente, evitando el uso de find .
  • ## significa "uno o más de los anteriores" en la sintaxis global extendida de zsh, es análogo a + en sintaxis de expresiones regulares (extendida).
  • (om) es un calificador global para ordenar archivos por tiempo de modificación, como ls -t .

Notoriamente, no existe una manera simple de hacer esto de manera sólida con las herramientas POSIX o incluso con las herramientas GNU y ksh.


Linux
  1. ¿Cómo hacer A Ls y luego ordenar los resultados por fecha de creación?

  2. Linux:¿cómo encontrar la fecha de creación del archivo?

  3. ¿Cómo se las arregla la fecha de Coreutil para obtener resultados tan extraños?

  4. ¿Cómo hago una lista recursiva de todos los directorios en una ubicación, primero en amplitud?

  5. Cómo canalizar los resultados de 'buscar' a mv en Linux

Cómo encontrar recursivamente y enumerar los archivos por fecha en Linux

Cómo encontrar la dirección IP en Linux

Cómo encontrar el nombre de host en Linux

Cómo encontrar la fecha y hora exactas de instalación de su sistema operativo Linux

Cómo encontrar la fecha y hora de instalación del sistema operativo Linux

Cómo encontrar archivos en Debian