github.com/yourbase/yb@v0.7.1/gen_big_files.bash (about)

     1  #!/bin/bash
     2  
     3  ONE_MB=$((1024*1024))
     4  ONE_GB=$(($ONE_MB*1024))
     5  
     6  MB_FILES=${1:-6}
     7  GB_FILES=${2:-6}
     8  
     9  FILE_PREFIX="YBrnd_"
    10  
    11  function gen_files() {
    12      base=${1:-based-somethin}
    13      max_size=${2:-100}
    14      n_files=${3:-9}
    15      unit="${4:-M}"
    16  
    17      min_size=25
    18      step=5
    19  
    20      # Safe limits?
    21      [ $unit = "G" -a $max_size -gt 2 ] && max_size=2
    22  
    23      if [ $max_size -lt 25 ]; then
    24          min_size=1
    25          step=1
    26      fi
    27  
    28      sz=$min_size
    29      for (( n=1; n<=$n_files; n++ )); do
    30          file_name="${base}_${sz}${unit}B.data"
    31          echo "#${n}: $file_name"
    32  
    33          [ $unit = "M" ] && multi=$ONE_MB
    34          [ $unit = "G" ] && multi=$ONE_GB
    35  
    36          tail -c $(( $n * $multi )) /dev/urandom > $file_name
    37  
    38          [ $sz -le $max_size ] && sz=$((sz + $step))
    39      done
    40  }
    41  
    42  function get_uuid() {
    43      cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-16} | head -n 1
    44  }
    45  
    46  function rand_num() {
    47      cat /dev/urandom | tr -dc '1-9' | fold -w 256 | head -n 1 | head --bytes 1
    48  }
    49  
    50  function uniq_fname() {
    51      echo "${FILE_PREFIX}$(get_uuid)"
    52  }
    53  
    54  function generate_random_datafiles() {
    55      number_of_dirs=$(rand_num)
    56      depth_of_dirs=$(rand_num)
    57      number_of_files=$(rand_num)
    58  
    59      [ $number_of_dirs -gt 3 ] && number_of_dirs=3
    60      [ $number_of_files -gt 3 ] && number_of_files=3
    61  
    62      mkdir ./testdata
    63      pushd ./testdata
    64      i=1
    65      while [ $i -le $number_of_dirs ]; do
    66          dir_s="./"
    67          x=1
    68          while [ $x -le $depth_of_dirs ]; do
    69              dir_s="${dir_s}$(get_uuid)/"
    70  
    71              x=$(( $x + 1 ))
    72          done
    73          mkdir -p ${dir_s}
    74          echo "----- Generation $i of $number_of_dirs: 2 big ones and $number_of_files medium ones -----"
    75          # Create data files in leaf dirs
    76          gen_files "${dir_s}$(uniq_fname)" 40 $number_of_files "M"
    77          gen_files "${dir_s}$(uniq_fname)" 2 2 "G"
    78  
    79          i=$(( $i + 1 ))
    80      done
    81      popd
    82  
    83      gen_files "$(uniq_fname)" 35 2 "M"
    84  
    85  }
    86  
    87  generate_random_datafiles