I have a set of files, all that are named with the convention file_[number]_[abcd].bin (where [number] is a number in the range 0-size of drive in MB). i.e there is file_0_a.bin, file_0_b.bin, file_0_c.bin and file_0_d.bin and then the 0 would become a 1 and so on. The number of files is figured out at run-time based on the size of the partition. I need to delete all of the files that have been created, but in a pseudo-random manner. in blocks of size that I need to be able to specify, i.e where there is 1024 files, delete 512, then delete another 512.I have the following function for doing it currently, which I call the required number of times, but it will get progressively less likely to find a file that exists, to the point where it might never complete. Obviously, this is somewhat less than ideal. What is another method that I can use to delete all of the files in a random order?deleteRandFile() #$1 - total number of files{    i=$((RANDOM%$1))    j=$((RANDOM%3))    file=    case $j in    0)        file=${dest_dir}/file_${i}_a.bin;;    1)        file=${dest_dir}/file_${i}_b.bin;;        2)        file=${dest_dir}/file_${i}_c.bin;;    3)        file=${dest_dir}/file_${i}_d.bin;;    esac    if ! [[ -f $file ]]; then        deleteRandFile $1    else        rm $file    fi    return 0;}Edit:I'm trying to delete in random order so that I can fragment the files as much as possible. This is part of a script that begins by filling a drive with 1MB files, and deletes them, 1024 at a time, then fills the 'gap' with 1 1GB file. Rinse and repeat until you have some very fragmented 1GB files.
How do I delete all of a set of files in a random order?
bash;shell script;files
If you want to delete all the files, then, on a GNU system, you could do:cd -P -- $destdir &&  printf '%s\0' * | # print the list of files as zero terminated records    sort -Rz |      # random sort (shuffle) the zero terminated records    xargs -r0 rm -f # pass the input if non-empty (-r) understood as 0-terminated                    # records (-0) as arguments to rm -fIf you want to only delete a certain number of those matching a regexp you'd insert something like this between the sort and xargs:awk -v RS='\0' -v ORS='\0' -v n=1024 '/regexp/ {print; if (--n == 0) exit}'With zsh, you could do:setopt extendedglobshuffle() REPLY=$RANDOMrm -f file_<->_[a-d].bin(.+shuffle[1,1024])