Você estava muito perto. Sua pergunta foi quase a sintaxe correta:
cp P10802{75..83}.JPG ~/Images
Eu tenho uma lista de arquivos com números consecutivos como sufixos. Eu gostaria de copiar apenas um intervalo desses arquivos. Como posso especificar um intervalo como parte do meu comando cp.
$ls
P1080272.JPG* P1080273.JPG* P1080274.JPG* P1080275.JPG* P1080276.JPG* P1080277.JPG*
P1080278.JPG* P1080279.JPG* P1080280.JPG* P1080281.JPG* P1080282.JPG* P1080283.JPG*
Eu gostaria de copiar arquivos de P1080275.JPG para P1080283.JPG com algo semelhante a:
$cp P10802[75-83].JPG ~/Images/.
Existe uma maneira de fazer isso?
Para iterar em um intervalo no bash:
for x in {0..10}; do echo $x; done
Aplicando o mesmo no seu caso:
for x in {272..283}; do cp P1080$x.JPG ~/Images; done
Zsh, com a opção extendedglob tem o operador globbing (correspondência de padrões).
setopt extendedglob
echo P10802<75-83>.JPG
irá corresponder nomes de arquivos no diretório atual que correspondem a esse padrão (cuidado com o fato de que P1080275.JPG corresponde, mas o mesmo acontece com P108020000000075.JPG)
Na outra extremidade, o operador de expansão de cadeia {x ... y} (suportado por zsh e versões recentes de bash e ksh93), expande para as cadeias de x para y, independentemente de quais arquivos existem na cadeia atual. diretório.
cp P10802<75-83>.JPG ~there
copiará os arquivos correspondentes, então
cp P10802{75..83}.JPG ~there
Mas você receberá erros se, por exemplo, o P1080281.JPG não existir.
Isso funcionaria para você:
for each in {75..83}; do cp P10802$each.JPG ~/Images/; done