Como renomear um arquivo em um GUID aleatório?

5

A tarefa é substituir o nome de um arquivo (na verdade, de todos os arquivos em um diretório) (mas deixar a extensão intacta) com um UUID / GUID aleatório. Alguma idéia de como fazer isso?

    
por Ivan 18.01.2011 / 03:54

3 respostas

4

Semelhante à resposta bahamat, mas gera UUIDs reais. Os UUIDs possuem alguns bits reservados usados para determinar a versão e a variante usadas. Existem atualmente 5 tipos de UUIDs definidos, UUIDs aleatórios, como você pediu, são versão 4. Você notará que os UUIDs da versão 4 possuem este formato:

442b7f35-f33f-4b8d-9a07-db8ec207129e
              |    '-- variant (bits 10__ -> [89AB])
              '------- version (bits 0100 -> 4)

Além disso, esta versão não causa danos caso a geração do UUID falhe.

for i in *; do uuid=$(uuidgen -r) && mv -- "$i" "$uuid.${i##*.}" done

Usando / proc / sys / kernel / random / uuid :

for i in *; do uuid=$(cat /proc/sys/kernel/random/uuid) && mv -- "$i" "$uuid.${i##*.}" done
    
por 19.01.2011 / 01:24
3

Algo parecido com isto:

for i in *; do mv -- "$i" "$(openssl rand -hex 16).${i##*.}"; done

Usar openssl rand 16 oferece a você GUIDs de 128 bits. Use 32 se você quiser um GUID de 256 bits.

    
por 18.01.2011 / 04:27
2

O script Short Perl abaixo - o uso de cat para obter o uuid não é a maneira mais limpa / rápida de codificá-lo, mas mantém o comando curto:

perl -e '
  foreach (@ARGV) {
    my $uid=qx|cat /proc/sys/kernel/random/uuid|;
    chomp $uid;
    (my $new=$_)=~s#(.*)\.#$uid.#;
    rename($_, $new)
  }
' *.file_ext

O item acima usa um arquivo em / proc no linux como fonte de uuids:

[bash#] cat /proc/sys/kernel/random/uuid
d474706f-b18c-4e4b-8762-5ed577c74ac3
    
por 18.01.2011 / 09:49

Tags