[1510852838790,1510898258530]
é um operador glob padrão que corresponde a um caractere no conjunto de caracteres. [ab,c]
corresponde a a
, b
, ,
ou c
. Então [1510852838790,1510898258530]
é o mesmo que [,01235789]
ou [,0-357-9]
. Ou seja, corresponde a vírgulas ou dígitos decimais diferentes de 4
e 6
.
*(...)
é um operador glob do shell Korn (também suportado por zsh -o kshglob
e bash -O extglob
) que corresponde a 0 ou mais ...
.
Portanto, *([1510852838790,1510898258530]).jpg
corresponde a qualquer sequência de ,01235789
caracteres seguida por .jpg
.
Se você quisesse corresponder qualquer string que consistisse em um número decimal entre 1510852838790 e 1510898258530, você precisaria do operador <x-y>
glob do zsh
shell:
printf '%s\n' <1510852838790-1510898258530>.jpg
A resposta à qual você está vinculando refere-se a outro recurso do shell zsh
(novamente não bash
): o qualificador [x,y]
glob.
Qualificadores Glob é uma parte (...)
que é adicionada ao final de uma glob para adicionar alguns critérios diferentes daqueles baseados no nome.
Por exemplo, *.jpg(.)
é *.jpg
mas limitado a arquivos regulares (excluindo diretórios, links simbólicos, sockets, fifos ...)
*.jpg([5,10])
é o quinto ao décimo arquivos na lista de arquivos que correspondem a *.jpg
(classificados em modo léxico).
Observe que os qualificadores zsh glob estão em conflito com kshglob
. Se você quiser usar kshglob
(mas geralmente você não o faria, a menos que queira interpretar o código pretendido para ksh como zsh extendedglobs são geralmente melhores que os ksh), você geralmente também deseja desabilitar a opção bareglobqual
(ou use o comando o modo de emulação ksh com emulate ksh
que cuidaria disso e também permitiria mais comportamentos semelhantes ao ksh).
O equivalente a ksh
' *(x)
em zsh
extended globs é x#
(como regexp x*
, exceto que em globs *
é usado para outra coisa).
bash
não tem o operador <x-y>
glob nem os qualificadores glob. Em bash
, você pode fazer:
zsh -c "printf '%s\n' <1510852838790-1510898258530>.jpg"
Ou você pode imprimir todos os arquivos number.jpg
e postar a saída com awk
:
shopt -s extglob
printf '%s\n' *([0-9]).jpg |
awk -F. '$1 >= 1510852838790 && $1 <= 1510898258530'
De qualquer forma, se você vai tentar encontrar lacunas na sequência de números, provavelmente vai querer usar awk
de qualquer maneira.
Como (de volta a usar zsh
):
print -l <->.jpg(n) | awk -F. '
{diff = ($0 - prev) / 1000 / 60}
NR > 1 && (diff < 29 || diff > 31) {print $0, "diff=" diff}
{prev = $0}'