cat последние 5 файлов в каталоге

В C см. getopt_long и в bash поищите getopts

5
31.05.2018, 01:31
4 ответа

En ksh93, bashozsh:

files=( 2*.txt )
cat "${files[@]: -5}"

Esto crearía una matriz de nombres de archivo que coinciden con el patrón 2*.txt. Luego generaría el contenido de los últimos cinco de estos.

En zsh, también puede especificar un rango de archivos como parte de sus calificadores globales:

cat 2*.txt([-5,-1])

En cualquier shell POSIX, esto también se puede hacer a través de

set -- 2*.txt
while [ "$#" -gt 5 ]; do shift; done   # or: [ "$#" -gt 5 ] && shift "$(( $# - 5 ))"
cat "$@"

Esto establece los parámetros posicionales para los nombres de archivo que coinciden con el patrón. Luego cambia los nombres desde el principio de la lista hasta que la lista solo tenga cinco elementos. Luego se invoca caten los nombres de archivo restantes.

En todas estas soluciones, los archivos se ordenarían lexicográficamente. Los nombres de archivo con espacios o saltos de línea se manejan correctamente.

7
27.01.2020, 20:35

Basado en la pregunta, sin perspectivas de espacios y 2 *.txt felizmente devolviendo el orden correcto, ¿qué tal

cat $(ls 2*.txt|tail -5)
1
27.01.2020, 20:35

Usaría un ciclo de lectura while, esto manejaría archivos con espacios.

ls 2*.txt | tail -5 | while read loop
do
  cat "$loop" 
done 

Si siempre quiere los 5 más recientes, puede cambiarlos als -tr | tail -5

1
27.01.2020, 20:35

Como se mencionó latesten cuestión, podemos verificar con el tiempo de modificación de los archivos en el directorio.

 cat $(ls -ltr *.txt | tail -n5 | awk '{print $NF}' | tr '\n' ' ')
  • ls -ltr-mostrará una lista de archivos con respecto a la marca de tiempo de modificación (inversa)

  • tail -n5-tomará los últimos 5 archivos

  • $NF-último campo

  • tr-transponer columna a fila

0
27.01.2020, 20:35

Теги

Похожие вопросы