I wanted to make a simple slideshow for a cheap Kindle turned photo frame in my office. Windows Movie Maker (free, already installed program) does not have a randomize function when importing photos. I had a lot of photos I wanted imported and I wanted them randomized. Movie Maker doesn’t include subfolders for some dumb reason, so I also needed a way to grab pictures from various directories and put them in a single directory.
My solution (not movie-maker specific) was to use bash combined with find, ln, and mv to get the files exactly how I want them. The process goes as follows:
- Create a temporary folder
- Use the find command to find files you want
- Use -type f argument to find only files (don’t replicate directory structure)
- Use the -exec argument to call the ln command to create links to each file found
- Use the -s argument of ln to create symbolic links
- Use the -b argument of ln to ensure duplicate filenames are not overwritten
- Invoke a one line bash command to randomize the filenames of those symbolic links
It worked beautifully. The commands I ended up using were as follows:
mkdir temp cd temp find /Pictures/2013/ -type f -exec ln -s -b {} . \; #repeat for each subfolder as needed, unless you want all folders in which case you can just specify the directory beneath it. find /Pictures/2014/ -type f -exec ln -s -b {} . \; find /Pictures/2015/ -type f -exec ln -s -b {} . \; for i in *.JPG; do mv "$i" "$RANDOM.jpg"; done #repeat for all permutations. The -b argument of ln creates files with tildes in the extension - don't forget about them. for i in *.jpg; do mv "$i" "$RANDOM.jpg"; done for i in *.JPG~; do mv "$i" "$RANDOM.jpg"; done for i in *.jpg~; do mv "$i" "$RANDOM.jpg"; done
The end result was a directory full of pictures with random filenames, ready to be dropped into any crappy slideshow making software of your choosing 🙂