创建许多具有随机内容的文件


23

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

例如,

Name            size
file1.01        2K
file2.02        3K
file3.03        5K
etc.

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


您所说的“排他性”是什么意思?在上下文中这没有意义,因此您可能使用了错误的单词。
吉尔斯(Gilles)'所以

我的意思是文件不能具有相同的内容。
若奥·何塞

因此,排他性意味着独特。
somehume

Answers:


25

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

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

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


2
bash出于多种原因需要这样做,包括$((…))$RANDOM。甚至$(…)可能并不存在于每个 shell中。
G-Man说'恢复莫妮卡'

1
@ G-曼,在任何情况下,没有这些特征是特定于bash他们也没有起源于bash{1..1000}来自zshfor n in...; done和变量扩展来自Bourne shell的$(...)$((...))$RANDOM 来KSH)。不属于POSIX的特点是{1..1000}$RANDOM/dev/urandom
斯特凡Chazelas

1
如果您希望1..1000为恒定宽度,则您需要"%04d"在这种情况下bashzsh{0001..1000}使用它printf
dave_thompson_085

附加功能:我需要一种将这些文件分布在许多随机命名的嵌套子目录上的方法。
stu

10

有一个变化seqxargsddshuf

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

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

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

xargs -n1 -I%执行该命令sh -c 'dd ... % ...'用于更换每个序列号与它

dd if=/dev/urandom of=file.% bs=$(shuf ...) count=10241024个块创建从/ dev / urandom馈入的文件,块大小为

shuf -i1-10 -n1110的随机值


Wat到底是做什么的?
saruftw

1
@ saru95说明已添加。
FloHimself

这将创建10个随机大小的文件。将“ 10”更改为所需的文件数。
不然

2

您可以执行以下操作:

#!/bin/bash
filecount=0
while [ $filecount -lt 10000 ] ; do
    filesize=$RANDOM
    filesize=$(($filesize+1024))
    base64 /dev/urandom | 
    head -c "$filesize" > /tmp/file${filecount}.$RANDOM
    ((filecount++))
done

我尝试这样做,但是没有用。您可能需要解释参数。:)
若奥·何塞

非常快的thx @rahul
BG Bruno,

2

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

dd if=/dev/urandom bs=1024 count=10240 | split -a 4 -b 1k - file.

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.