Em ksh93
, bash
ou zsh
:
files=( 2*.txt )
cat "${files[@]: -5}"
Isso criaria uma matriz dos nomes de arquivos correspondentes ao padrão 2*.txt
. Em seguida, ele produziria o conteúdo dos cinco últimos.
Em zsh
, você também pode especificar um intervalo de arquivos como parte de seus qualificadores glob :
cat 2*.txt([-5,-1])
Em qualquer shell POSIX, isso também pode ser feito através de
set -- 2*.txt
while [ "$#" -gt 5 ]; do shift; done # or: [ "$#" -gt 5 ] && shift "$(( $# - 5 ))"
cat "$@"
Isso define os parâmetros posicionais para os nomes de arquivos que correspondem ao padrão. Em seguida, desloca os nomes do início da lista até que a lista tenha apenas cinco elementos. cat
é então invocado nos nomes de arquivos restantes.
Em todas essas soluções, os arquivos seriam classificados lexicograficamente. Nomes de arquivos com espaços ou novas linhas são tratados corretamente.