Генератор случайных файлов?

Кто-нибудь имеет простую оболочку script или c-программу для генерации случайных файлов заданного размера со случайным содержимым в Linux?

6 ответов

Как насчет:

head -c SIZE /dev/random > file


openssl rand может использоваться для генерации случайных байтов. Команда ниже:

openssl rand [bytes] -out [filename]

Например, openssl rand 2048 -out aaa будет генерировать файл с именем aaa, содержащий 2048 случайных байтов.


Вот несколько способов:

Python:

RandomData = file("/dev/urandom", "rb").read(1024)
file("random.txt").write(RandomData)

Bash:

dd if=/dev/urandom of=myrandom.txt bs=1024 count=1

используя C:

#include <stdio.h>
#include <stdlib.h>
int main()
{
 int byte_count = 1024;
 char data[4048];
 FILE *fp;
 fp = fopen("/dev/urandom", "rb");
 fread(&data, 1, byte_count, fp);
 int n;
 FILE *rand;
 rand=fopen("test.txt", "w");
 fprintf(rand, data);
 fclose(rand);
 fclose(rand);
}
</stdlib.h></stdio.h>


Вот быстрый грязный script, который я написал в Perl. Он позволяет вам управлять диапазоном символов, которые будут в сгенерированном файле.

#!/usr/bin/perl
if ($#ARGV < 1) { die("usage: <size_in_bytes> <file_name>\n"); }
open(FILE,">" . $ARGV[0]) or die "Can't open file for writing\n";
# you can control the range of characters here
my $minimum = 32;
my $range = 96;
for ($i=0; $i< $ARGV[1]; $i++) {
 print FILE chr(int(rand($range)) + $minimum);
}
close(FILE);
</file_name></size_in_bytes>

Для использования:

./script.pl file 2048

Здесь более короткая версия, основанная на идее S. Lott о выходе в STDOUT:

#!/usr/bin/perl
# you can control the range of characters here
my $minimum = 32;
my $range = 96;
for ($i=0; $i< $ARGV[0]; $i++) {
 print chr(int(rand($range)) + $minimum);
}

Предупреждение: Это первый script, который я написал в Perl. Когда-либо. Но он работает нормально.


Вы можете использовать мой generate_random_file.py script (Python 3), который я использовал для генерации тестовых данных в моем проекте.

  • Он работает как на Linux, так и на Windows.
  • Это очень быстро, потому что он использует os.urandom() для генерации случайных данных в кусках 256 KiB вместо генерации и записи каждого байта отдельно.


Python. Назовите его make_random.py

#!/usr/bin/env python
import random
import sys
import string
size = int(sys.argv[1])
for i in xrange(size):
 sys.stdout.write( random.choice(string.printable) )

Используйте его так:

./make_random 1024 >some_file

Это будет записывать 1024 байт в stdout, которые вы можете записать в файл. В зависимости от вашей системной кодировки это, вероятно, не будет читаться как Unicode.

licensed under cc by-sa 3.0 with attribution.