0

Bash File Sorter

#!/bin/bash

# This script only works specifically on files that follow a specific naming system.
# It parses the first three letters after the first position and creates directories 
# using those three letters.  It should then move the files into the directories
# whose names also start with a similar prefix.
#
# I.e. the file [Alpha] Bravo - Charlie - {001}.pdf should get moved into a
# directory called ./alp
#
# This first line takes the command input and moves it to a variable so it
# can be more easily handled.

sStartDir=$1
if [ $sStartDir = "" ]; then
    sStartDir="./"
fi

cd $sStartDir

# This first step gave me trouble initially; in its current state it should
# pipe the output of 'ls' into the 'read' function of the script.
# When a 'for' loop was used it only grabbed the first word of the filename.

ls -1 | while read sFilename; do
    # Evaluate filename; make sure it is sortable
    Test=${sFilename:0:1}
    if [ $Test = "[" ]; then
        # We know it's sortable, now get the 3-letter prefix
        # Strip out the spaces
        sPrefix=${sFilename/" "/""}
        sPrefix=${sPrefix:1:3}
        # Check whether it is an existing directory
        sPrefix=$(echo $sPrefix | tr [:upper:] [:lower:])
        
        if [ ! -d ./$sPrefix ]; then
            # If not, then create it
            mkdir ./$sPrefix
        fi
        # Check whether the same file exists in the destination
        if [ ! -e "./$sPrefix/$sFilename" ]; then
            # Move the file into that directory        
            mv "$sFilename" "./$sPrefix"
        else
            echo "Error: File exists at destination: "$sFilename    
        fi
    fi
done

A member of a now-defunct comics forum requested a script that would sort his collection according to a specific file structure.

The script should take a directory as a parameter and sort the contents within into folders based on the three-letter prefix of the files. For this to work, the files do need to be named in that weird way comics seem to be, i.e.

[Author] Title Vol Issue.cbr

It will then create a series of subdirectories based on the author name and move the file there, i.e.

./aut

…or if the directory exists, the file will just be moved there without creating a new folder.

Project Info

Client: Anonymous

Services

  • Scripting

Leave a Reply