Generate a random filename in unix shell

前端 未结 14 716
说谎
说谎 2020-12-22 23:39

I would like to generate a random filename in unix shell (say tcshell). The filename should consist of random 32 hex letters, e.g.:

c7fdfc8f409c548a10a0a89a7         


        
14条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-23 00:02

    Hope to add a (maybe) better solution to this topic.

    Notice: this only works with bash4 and some implement of mktemp(for example, the GNU one)

    Try this

    fn=$(mktemp -u -t 'XXXXXX')
    echo ${fn/\/tmp\//}
    

    This one is twice as faster as head /dev/urandom | tr -cd 'a-f0-9' | head -c 32, and eight times as faster as cat /dev/urandom | tr -cd 'a-f0-9' | head -c 32.

    Benchmark:

    With mktemp:

    #!/bin/bash
    # a.sh
    for (( i = 0; i < 1000; i++ ))
    do
        fn=$(mktemp -u -t 'XXXXXX')
        echo ${fn/\/tmp\//} > /dev/null
    done
    
    time ./a.sh 
    ./a.sh  0.36s user 1.97s system 99% cpu 2.333 total
    

    And the other:

    #!/bin/bash
    # b.sh
    for (( i = 0; i < 1000; i++ ))
    do
        cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 32 > /dev/null
    done
    
    time ./b.sh 
    ./b.sh  0.52s user 20.61s system 113% cpu 18.653 total
    

提交回复
热议问题