Use zsh
em vez de bash
, onde você pode definir a classificação (por nome por padrão):
files=(/my/directory/**/*.jpg(.NDms+2ms-15))
Isso também evitará problemas com nomes de arquivo contendo caracteres de nova linha ( bash-4.4
' mapfile
suporta -d ''
, que pode ser usado com find -print0
).
Para classificar ( o rder) pelo m tempo de odificação:
files=(/my/directory/**/*.jpg(.NDms+2ms-15om))
Para obter um pedido similar (por nome) com o GNU find
e o GNU sort
:
find /my/directory -name '*.jpg' \
-type f \
-newermt '-15 seconds' \
! -newermt '-2 seconds' \
-print0 |
sort -zt/ -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 -k6,6 -k7,7 -k8,8 \
-k9,9 -k10,10 -k11,11 -k12,12 -k13,13 -k14,14
Por ordem do tempo de modificação:
find /my/directory -name '*.jpg' \
-type f \
-newermt '-15 seconds' \
! -newermt '-2 seconds' \
-printf '%T@:%pfiles=(/my/directory/**/*.jpg(.NDms+2ms-15))
' |
sort -zn |
sed -z 's/[^:]*://#'
Adicione | tr '
para armazenar em uma variável bash escalar (não matriz) ou use com readarray
' '\n'mapfile
/ -d ''
sem readarray -d '' array < <(find...)
(dividir em nova linha, caso em que você pode assim como a coisa toda em registros delimitados por nova linha em vez de registros delimitados por NUL).
Ou use zsh
com bash 4.4 ou superior ou em array=(${(0)"$(find...)"})
, use %code% .