A maneira mais simples que encontrei é:
touch $(paste -d '.' <(printf "%s\n" File{001..005}) \
<(printf "%s\n" {000..004}))
Isso criará
File001.000 File002.001 File003.002 File004.003 File005.004
Para entender como isso funciona, dê uma olhada no que cada comando imprime:
$ printf "%s\n" File{001..005}
File001
File002
File003
File004
File005
$ printf "%s\n" {000..004}
000
001
002
003
004
$ paste -d '.' <(printf "%s\n" File{001..005}) \
> <(printf "%s\n" {000..004})
File001.000
File002.001
File003.002
File004.003
File005.004
Então, todos juntos, eles se expandem para
touch File001.000 File002.001 File003.002 File004.003 File005.004
Criar 5 arquivos com nomes aleatórios é muito mais fácil:
$ for i in {1..5}; do mktemp File$i.XXX; done
File1.4Jt
File2.dEo
File3.nhR
File4.nAC
File5.Fd8
Para criar 5 arquivos com nomes aleatórios de 5 caracteres alfabéticos e extensões aleatórias, você pode usar isto:
$ for i in {1..5}; do
mktemp $(head -c 100 /dev/urandom | tr -dc 'a-z' | fold -w 5 | head -n 1).XXX
done
jhuxe.77b
cwvre.0BZ
rpxpp.ug1
htzkq.f9W
bpgor.Bak
Finalmente, para criar 5 arquivos com nomes aleatórios e sem extensões, use
$ for i in {1..5}; do mktemp -p ./ XXXXX; done
./90tp0
./Hhn4U
./dlgr9
./iVcn4
./WsJIx