linux - Bash: How to list n random number of files (not head or tail)

09
2014-02
  • temp

    I have a large directory containing numerous files of similar kind. I have to send few random files for auditing. These files should not be from the top or bottom (eg. not in head or tail). This is sub process which I am struggling.

    I want to get any number of files. It may be 10 or 2 or 3, but should not be in any order.

    For example from this list of files:

    10 1121231243 12 3124234ewdf 31243345 xaa 112 1121231243214 3 3124234ewdffd 3124334532 xab 1121 112123124321442334 3124 31243 3124334532324 xac 112123 1121ewszf 3124234 312433 file1
    

    I would like to get a random subset like in this instance:

    1121 112123124321442334 3124 1121ewszf
    
  • Answers
  • Michał Sacharewicz

    Use random sort (-R or --random-sort) and then head or tail:

    ls | sort -R | head -10

  • gnp

    You can use sort -R to sort the list randomly, and then use the $RANDOM variable with head to get a random number of results:

    ls | sort -R | head -n $(( $RANDOM % 10 + 1 ))
    

    You will get 10 results or less (never zero)


  • Related Question

    unix - How can I take the output of a shell script and place it in a file on the command line?
  • Questioner

    How can I take the output of a shell script and place it in a file on the command line?


  • Related Answers
  • Am.
    # write to file
    sh myscript > out.txt
    # append to file
    sh myscript >> out.txt
    # write both output and stderr to file
    sh myscript 2&1>> out.txt
    
  • Oren Mazor
    $ ./foo >> myoutputfile.txt