Случайный код генератора файлов? - PullRequest
4 голосов
/ 10 августа 2010

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

Ответы [ 6 ]

13 голосов
/ 10 августа 2010

Как насчет:

head -c SIZE /dev/random > file
3 голосов
/ 03 мая 2013

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

openssl rand [bytes] -out [filename]

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

2 голосов
/ 21 октября 2013

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

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);
}
0 голосов
/ 05 февраля 2013

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

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

Вот быстрый грязный скрипт, который я написал на 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);

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

./script.pl file 2048

Вот более короткая версия, основанная на идее С. Лотта о выводе в 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);
}

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

0 голосов
/ 10 августа 2010

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 байта в стандартный вывод, который вы можете записать в файл. В зависимости от кодировки вашей системы это, вероятно, не будет читаться как Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...