2012-03-21 3 views
21

Я хотел бы генерировать фиктивные файлы в bash. Содержание не имеет значения, если бы это было случайно, было бы неплохо, но все тот же байт также приемлем.Создайте фиктивные файлы в 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 это может быть намного быстрее, но сценарий явно не оптимален.

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

+1

Является 'dummy.zi' опечатка? –

ответ

38

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

$ head -c 100000 /dev/urandom >dummy 
+0

Доступен ли '/ dev/urandom' на GitBash + Windows? – Samveen

+0

@Samveen Насколько я могу судить: ** да **. –

9

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

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

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

x=`expr $x + 1`; 

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

x=((x+1)) 

Но для приращения счетчика в цикле, было для петли изобретенной:

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 

3 примечания:

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

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

for x in {0..100000} 
do 
    echo a 
done >> dummy.zip 
+0

'dd' недоступен в GitBash для Windows, но спасибо за хорошее решение – jabal

+0

[Вот некоторые родные порты для Win32 GNU-utils] (http://unxutils.sourceforge.net/), очень полезные вещи среди них (grep, sed, cat, tac, wc, ...), даже если вы решите принять другое решение. –

+1

Решение 'dd' работает в Cygwin на окнах. – Barney

6

Это создаст текстовый файл 100000 байт большой:

yes 123456789 | head -10000 > dummy.file 
0

эхо «Для того, чтобы напечатать слово в последовательности из файла « c = 1 для w в cat file do echo" $ c.$ Ш» с = expr $c +1 сделано

1

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

fallocate -l 100KB dummy_100KB_file 

Смотрите "Quickly create a large file on a Linux system?" для получения более подробной информации

+0

это метод. rest (dd cat yes и т. д.) - это обходные пути – Aurangzeb

0

Легкий способ:..

тестовый файл

изготовить и поставить одну строку "тест"

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

cat test >> test 

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

+0

Я предполагаю, что OP искал не-ручной способ сделать это. – akousmata

+0

Это было первоначально необходимо для точного тестирования, «хороший способ генерации фиктивных (двоичных) файлов заданного размера». Ваше решение творческое, но не точное. Но спасибо :-) – jabal

 Смежные вопросы

  • Нет связанных вопросов^_^