Information wants to be free...

File Shuffler

This is a small Perl script to shuffle files. By that, I mean take a directory of files and put a unique random number before (as a prefix to) each file. When the files in the directory are listed alphabetically afterwards, they will actually be listed randomly.

I had need of this because the MP3 player function in my car stereo plays the files it find on the CD alphabetically. I wanted to randomize/shuffle the songs, and the workaround was to use this script on the files before burning the CD.

Here is the code:

#!/usr/bin/perl -w
use strict;
use List::Util qw/shuffle/;

my $directory = shift
  or die "Usage: $0 <directory>\n";

chdir $directory
  or die "Error: Could not change to directory.\n";

my @files = glob "*";

# Find digits in amount of files.
my $digits = 0;
for (split //, scalar(@files)) {
  $digits++;
}

for my $number (&shuffle(1..scalar(@files))) {
  my $file = shift @files;
  my $new = sprintf "%0${digits}d--%s", $number, $file;
  rename $file, $new;
}
          


Topic: Scripts and Code, by Kjetil @ 18/05-2008, Article Link