我正在尝试使用以下代码生成一个随机字符串:
for pic in `ls *.jpg`; do
rdn=`echo $RANDOM | sha256sum | cut -d" " -f1`
mv "$pic" ${rnd}.jpg
done
脚本的这部分从包含大量 jpeg 文件的目录中运行,它应该随机化它们的文件名。问题在于
$RANDOM
变量在迭代过程中不会更新,因此每次都给出相同的哈希值。我尝试使用 /dev/urandom
,它可以工作,但比 $RANDOM
慢很多.我能做些什么来“再生”$RANDOM
每次读取?
最佳答案
在我的 Mac(使用 macOS High Sierra)上,/dev/urandom
给我二进制字节,所以上面的解决方案导致 tr: Illegal byte sequence
,所以我用了 base64
将字节转换为字符:
cat /dev/urandom | base64 | tr -dc '0-9a-zA-Z' | head -c100
或者我找到了一个没有 base64 的解决方案,所以你也可以得到标点符号:
cat /dev/urandom | LC_ALL=C tr -dc '\''[:alnum:]\!\@\#$\-\.\,'\'' | head -c40
关于random - 生成随机字符串 zsh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19556512/