如何生成随机大小的随机内容并附加到文件?

如何生成随机大小的随机内容并附加到文件?

因此,使用 Linux 中的终端,我需要将文本添加到完全随机且大小随机的文件中,我能找到的唯一方法是使用

$ < /dev/urandom tr -dc "\t\n [:alnum:]" | head -c1000 > file.txt

它具有特定的大小,是否有办法使它成为随机大小,对于 Linux 来说非常新,任何建议都将受到欢迎。

答案1

正如 @Kamil Maciorowski 指出的那样,您所提出的问题是没有对“随机大小”的含义进行任何限制的。在 0 和无穷大之间随机?您可能没有足够的磁盘空间。在 0 和驱动器上剩余的总可用空间之间随机?这可以做到,但您可能没有足够的磁盘空间经过几次迭代。

此外,像所有形式的完美一样,完美或“完全”的随机性很难实现。我没有资格说这与实现“完全随机”的目标有多接近。但假设您想要一个伪随机大小的伪随机组合,其中包含 96 个可打印 ASCII 字符(如果您认为RUBOUT可打印),请考虑以下解决方案:

将变量设置max_size为一次迭代中所需的最大随机文本字节数。我将使用 1 兆字节作为示例,但您可以将其设置为任何您喜欢的值。然后使用该值将小数随机数缩放为随机字节数。添加 .5 以四舍五入到最接近的整数,并丢弃小数点和任何尾随数字。

max_size=1048576
text_size=$(bc <<< "scale=6; $RANDOM/32767*$max_size+.5")
text_size="${text_size%.*}"

现在从 读取/dev/random,使用tr删除所需范围之外的字符,然后通过管道将其传输到head以将输出修剪为所需的字节数:

$ tr -d '\000-\037,\200-\377' < /dev/random | head -c $text_size > rand.txt

在实践中:

$ cat foo.sh
#!/usr/bin/env bash
max_size=1048576
text_size=$(bc <<< "scale=6; $RANDOM/32767*$max_size+.5")
text_size="${text_size%.*}"
echo $text_size
tr -d '\000-\037,\200-\377' < /dev/random | head -c $text_size > rand.txt
ls -l rand.txt
$ ./foo.sh
541168
-rw-------  1 jim  jim  541168 Aug  5 15:43 rand.txt
$ ./foo.sh
13888
-rw-------  1 jim  jim  13888 Aug  5 15:43 rand.txt
$ ./foo.sh
644659
-rw-------  1 jim  jim  644659 Aug  5 15:43 rand.txt

相关内容