创建许多包含随机内容的文件

cha*_*les 31 shell-script files

我正在寻找一个命令来创建包含至少 1KB 随机数据的多个(数千个)文件。

例如,

Name            size
file1.01        2K
file2.02        3K
file3.03        5K
etc.
Run Code Online (Sandbox Code Playgroud)

如何创建许多这样的文件?

lcd*_*047 40

由于您没有任何其他要求,因此应该可以执行以下操作:

#! /bin/bash
for n in {1..1000}; do
    dd if=/dev/urandom of=file$( printf %03d "$n" ).bin bs=1 count=$(( RANDOM + 1024 ))
done
Run Code Online (Sandbox Code Playgroud)

(这bash至少需要{1..1000})。

  • 出于多种原因,这需要 `bash`,包括 `$((...))` 和 `$RANDOM`。甚至`$(...)` 也可能不存在于*每个* shell 中。 (2认同)
  • @G-Man,无论如何,这些功能都不是`bash` 特有的,也不是源自`bash`(`{1..1000}` 来自`zsh`,`for n in...; done` 和变量扩展来自 Bourne shell,`$(...)`、`$((...))` 和 `$RANDOM` 来自 ksh)。不是 POSIX 的特性是 `{1..1000}`、`$RANDOM` 和 `/dev/urandom`。 (2认同)

Flo*_*elf 13

seqxargsdd和 的变体shuf

seq -w 1 10 | xargs -n1 -I% sh -c 'dd if=/dev/urandom of=file.% bs=$(shuf -i1-10 -n1) count=1024'
Run Code Online (Sandbox Code Playgroud)

根据评论的要求进行解释:

seq -w 1 10打印从0110的数字序列

xargs -n1 -I%sh -c 'dd ... % ...'为每个序列号执行命令,用它替换%

dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024创建从/dev/urandom提供的具有1024个块的文件,块大小为

shuf -i1-10 -n1110的随机值


Ed *_*all 6

这使用单个管道并且看起来相当快,但存在所有文件大小相同的限制

dd if=/dev/urandom bs=1024 count=10240 | split -a 4 -b 1k - file.
Run Code Online (Sandbox Code Playgroud)

说明:使用dd创建10240*1024字节的数据;将其拆分为 10240 个单独的文件,每个文件 1k(名称将从“file.aaaa”到“file.zzzz”运行)


小智 5

这将创建 15 个文件,每个文件包含 1MB 的随机数据:

for i in {001..015}; do head -c 1M </dev/urandom >randfile$i; done
Run Code Online (Sandbox Code Playgroud)