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