Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate dummy files in bash

I'd like to generate dummy files in bash. The content doesn't matter, if it was random it would be nice, but all the same byte is also acceptable.

My first attempt was the following command:

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

The problem was its poor performance. I'm using GitBash on Windows, so it might be much faster under Linux but the script is obviously not optimal.

Could you suggest me a quicker and nice way to generate dummy (binary) files of given size?

like image 839
jabal Avatar asked Mar 21 '12 07:03

jabal


People also ask

How do I create a temp file in bash?

Method # 1 – Use the mktemp or tempfile utility to create temporary random file name. The script or command should quit if it didn't get a safe temporary file using the exit command.


2 Answers

You can try head command:

$ head -c 100000 /dev/urandom >dummy 
like image 113
kev Avatar answered Sep 25 '22 18:09

kev


You may use dd for this purpose:

dd if=/dev/urandom bs=1024 count=5 of=dummy 
  • if:= in file
  • of:= out file
  • bs:= block size

Note, that

 x=`expr $x + 1`; 

isn't the most efficient way to calculation in bash. Do arithmetic integer calculation in double round parenthesis:

 x=((x+1))  

But for an incremented counter in a loop, there was the for-loop invented:

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

in contrast to:

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

Here are 3 things to note:

  • unlike the [ -case, you don't need the spacing inside the parens.
  • you may use prefix (or postfix) increment here: ++x
  • the redirection to the file is pulled out of the loop. Instead of 1000000 opening- and closing steps, the file is only opened once.

But there is still a more simple form of the for-loop:

for x in {0..100000} do     echo a  done >> dummy.zip  
like image 22
user unknown Avatar answered Sep 25 '22 18:09

user unknown