Como criar vários arquivos / diretórios com nomes aleatórios?

3

Estou tentando criar alguns arquivos com nomes e extensões diferentes. Vamos dizer que eu quero criar, por exemplo, 3 arquivos com o seguinte nome e extensão:

File001.000
File002.001
File003.002

Ou com extensão alfabética:

File001.A
File002.B
File003.C

Além disso, seria melhor se eu pudesse criar arquivos com nomes aleatórios e extensão.

Filexct.cbb
Filedht.ryt
Filefht.vbf
    
por αғsнιη 21.11.2014 / 17:08

3 respostas

4

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
    
por 21.11.2014 / 17:11
2

Se você quiser garantir que eles são diferentes, procure em mktemp :

$ mktemp 
/tmp/tmp.r8FumWPhn5
$ mktemp XXXXXXXX.tmp
Pu4Ii6Sf.tmp
    
por 21.11.2014 / 17:10
2

Encontrei uma maneira fácil de criar arquivos e também de diretórios com nomes e extensões aleatórios:

Para criar um arquivo aleatório com ext aleatório, use este comando:

$ mktemp XXX.$(mktemp -u XXX)
-u, --dry-run
    do not create anything; merely print a name (unsafe)

E para criar vários arquivos, use o comando acima em um loop:

$ for create in $(seq 5); do
      mktemp XXX.$(mktemp -u XXX);
  done

nDq.NoB
mT2.Ns0
DEN.aga
K7b.HCf
pNC.q9N

E, finalmente, se você quiser criar vários diretórios, use mktemp com sua opção -d .

mktemp -d XXX.$(mktemp -u XXX)
    
por 21.11.2014 / 18:00