Em zsh, showLatest 10
é (om[1,10])
no final do padrão. Estes são os qualificadores da glob ; om
classifica por tempo de modificação (o mais novo primeiro) e [1,10]
seleciona os primeiros 10 resultados.
find src -type f -iname \*.py
é print -lr src/**/(#i)*.py(D.)
(você precisa executar setopt extended_glob
primeiro, coloque isso em ~/.zshrc
).
O sinalizador de globbing .
filtra somente arquivos regulares, D
inclui arquivos e arquivos ocultos em diretórios ocultos, como o find
versão faria. (#i)
é um sinalizador globbing que torna o restante do padrão insensível a maiúsculas e minúsculas.
print -lr
imprime seus argumentos, um por linha (que print -lr --
se o primeiro argumento pode começar com um traço). Combinando os dois, para obter os arquivos mais recentes:
print -lr src/**/(#i)*.py(D.om[1,10])
que, na prática, você pode encurtar para print -lr src/**/*.py(om[1,10])
.
Em zsh, você provavelmente não precisará disso, porque pode classificar a lista de arquivos quando a obtiver, pelo menos se eles estiverem vindo de um único padrão. Aqui está uma maneira de implementar showLatest
em zsh que funciona com uma lista arbitrária de arquivos. Infelizmente, o qualificador om
glob só pode ser aplicado a um único padrão, e um único padrão pode corresponder apenas a arquivos em um único diretório ou árvore. Um truque para ignorar isso é usar o qualificador de glob e
(ou +
) para injetar uma lista arbitrária em um resultado de correspondência. Em seguida, aplique um qualificador o
glob para executar a classificação; Qualificadores integrados não agem no resultado da e
/ +
reescrita, mas os personalizados ( oe
ou o+
) do (a partir do zsh 5.0.5).
#!/usr/bin/env zsh
zmodload zsh/stat
files=("${(@f)$(<&0)}")
print -lr .(e\''reply=($files)'\'noe\''stat -A REPLY +mtime -- $REPLY'\')