Генерировать фиктивные файлы в bash - PullRequest
24 голосов
/ 21 марта 2012

Я бы хотел создать фиктивные файлы в bash.Содержание не имеет значения, если бы оно было случайным, это было бы хорошо, но все же байты также приемлемы.

Моей первой попыткой была следующая команда:

rm dummy.zip;
touch dummy.zip;
x=0;
while [ $x -lt 100000 ];
do echo a >> dummy.zip;
  x=`expr $x + 1`;
done;

Проблемабыла его плохая работа.Я использую GitBash в Windows, поэтому в Linux он может быть намного быстрее, но сценарий явно не оптимален.

Не могли бы вы предложить мне более быстрый и удобный способ создания фиктивных (двоичных) файлов заданного размера?

Ответы [ 8 ]

45 голосов
/ 21 марта 2012

Вы можете попробовать head команду:

$ head -c 100000 /dev/urandom >dummy
11 голосов
/ 21 марта 2012

Вы можете использовать dd для этой цели:

dd if=/dev/urandom bs=1024 count=5 of=dummy
  • , если: = в файле
  • из: = из файла
  • bs: = размер блока

Обратите внимание, что

 x=`expr $x + 1`;

не самый эффективный способ вычисления в bash.Выполните арифметическое целочисленное вычисление в двойных круглых скобках:

 x=((x+1)) 

Но для увеличенного счетчика в цикле был изобретен цикл for:

x=0;
while [ $x -lt 100000 ];
do echo a >> dummy.zip;
  x=`expr $x + 1`;
done;

в отличие от:

for  ((x=0; x<100000; ++x))
do
    echo a 
done >> dummy.zip 

Вот три вещи, на которые следует обратить внимание:

  • , в отличие от [-case, вам не нужен интервал внутри паренсов.
  • здесь вы можете использовать приращение префикса (или постфикса): ++ x
  • перенаправление файла извлекается из цикла.Вместо 1000000 шагов открытия и закрытия файл открывается только один раз.

Но есть еще более простая форма цикла for:

for x in {0..100000}
do
    echo a 
done >> dummy.zip 
9 голосов
/ 21 марта 2012

Будет создан текстовый файл размером 100 000 байт:

yes 123456789 | head -10000 > dummy.file
4 голосов
/ 11 марта 2015

$ openssl rand 1000000 -out random.tmp

3 голосов
/ 03 апреля 2015

Если у вас файловая система ext4, btrfs, xfs или ocfs2, и если вас не интересует содержимое, вы можете использовать fallocate. Это самый быстрый метод, если вам нужны большие файлы.

fallocate -l 100KB dummy_100KB_file

Подробнее см. " Быстрое создание большого файла в системе Linux? ".

0 голосов
/ 03 сентября 2018

Возможно

dd if=/dev/zero of=/dummy10MBfile bs=1M count=10
0 голосов
/ 03 февраля 2017

Простой способ:

сделать проверку файла и поставить одну строку "test"

Затем выполнить:

 cat test >> test

ctrl + c через минуту приведет к большому количествугигабайт:)

0 голосов
/ 14 июня 2013

echo "Печатать слово по порядку из файла" с = 1 для ш в cat file делать echo "$ c. $ w" с = expr $c +1 сделано

...