#!/usr/bin/perl $blocksize=4000; $size =0; $USAGE = " USAGE touch0 [OPTIONS] FILENAMES SYNOPSIS: Create named file(s) of specified size(s) (or $size). Will not overwrite existing files. OPTIONS: -number[KM] Specify filesize, eg. -123 -100K -20M, write blocksize=$blocksize. -r:number filesize += random number; -R:number file_1..file_number, max 9999 files. -v verbose. AUTHOR: (C)GPL, Mohsin Ahmed, http://www.cs.albany.edu/~mosh "; while( $_ = $ARGV[0], /^-/ ){ shift; m/^--$/ and last; m/^-v/ and ++$verbose; m/^-r:(\d+)/ and $randomsizes = $1; m/^-R:(\d{1,4})/ and (@ARGV = (1..$1)); if(m/^-(\d+)(\w?)/){ $size = $1; $size *= 1000 if m/k$/i ; $size *= 1e6 if m/M$/i ; print "size is $size\n"; $buffer = 'M' x $blocksize; } } die "$USAGE Need arg\n" unless @ARGV; $timenow = time(); foreach (@ARGV) { if( $randomsizes ){ $thissize = $randomsizes + int( rand( $size ) ) ; $_ = 'file_' . $_; }else{ $thissize = $size; } if( -e $_ ){ if( utime( $timenow, $timenow, $_) ){ print STDERR "Touched existing file '$_'\n"; }else{ warn "Could not touch $_ with time=$timenow.\n"; } next; } open( ONEFILE, ">$_" ) or warn "Cannot write $_\n", next; print STDERR "touch $thissize: $_\n"; while( $thissize ){ if( $thissize > $blocksize ){ syswrite( ONEFILE, $buffer, $blocksize ); die "syswrite error\n" if $blocksize < 0; $thissize -= $blocksize; }else{ syswrite( ONEFILE, $buffer, $thissize ); die "syswrite error\n" if $thissize < 0; $thissize = 0; } } close( ONEFILE ) or warn "Close '$_' failed\n"; }