Digamos, por exemplo, eu tenho os seguintes arquivos no meu diretório de trabalho: mjk0001.fits, mjk0002.fits, ... aumentando numericamente todo o caminho para mjk9999.fits.
Existe uma maneira de usar curingas UNIX para listar ou operar em um grupo seqüencial deles? Por exemplo, se eu precisar executar um processo de 0025 a 0050, que formato eu usaria?
Eu tentei o seguinte, mas não tive sucesso:
ls *[25-50].fits
ls mjk00[25-50].fits
ls mjk[0025-0050]*
ls *[0025-0050]*
Agradecemos antecipadamente a todos, MK
bash
unix
command-line
ls
Matt Keene
fonte
fonte
Respostas:
Você pode usar a expansão de chaves:
Zeros à esquerda podem ser incluídos, se necessário:
fonte
{25..50..2}
.Não diretamente, mas você pode usar vários padrões glob:
Não é exatamente o que você está procurando, mas é a coisa mais próxima que os padrões glob oferecem, e certamente é melhor do que digitar cada sistema de arquivos. Pelo menos o número de padrões necessários por intervalo numérico é limitado pelo log dos pontos de extremidade numéricos do intervalo.
fonte
Você pode usar um regex com grep. Eu não sou um guru de regex. A seguir, o padrão retorna os números entre 25 e 50:
Eu não sei se é possível e como, eventualmente, generalizar isso com grep.
fonte
Pode ser possível obter maior portabilidade ou flexibilidade usando um
for
loop eprintf
:Isso lida bem com os espaços e os resultados são adequados para tubulações e
xargs
para processamento adicional.Números com várias correspondências resultarão na listagem de todos os arquivos correspondentes.
Números sem correspondências reportarão um erro no stderr, mas
||true
suprimem um retorno de erro no nível do bash.No caso básico, porém, usar
for
eprintf
não é diferente do mais conciso:fonte
for i in {025..050} ; do ... ; done