75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
baseDir="/srv/yggdrasil/Videos/Shows"
 | 
						|
 | 
						|
# Helptext
 | 
						|
function usage() {
 | 
						|
    echo Sort files from /srv/yggdrasil/new_acquisition into appropriate show directories.
 | 
						|
    echo
 | 
						|
    echo Usage: $0 '[ -h ] [ -f fileToUse ] [ -c ] [ -n ] [ -q ] [ -v ]'
 | 
						|
    echo '  -c: Create sample sort file'
 | 
						|
    echo '  -f: Use this sort file'
 | 
						|
    echo '  -h: print this helptext.'
 | 
						|
    echo '  -n: Do not lock the libary -- this is useful for sorting other things after execution.'
 | 
						|
    echo '  -q: Mute output'
 | 
						|
    echo '  -v: Increase verbosity'
 | 
						|
}
 | 
						|
 | 
						|
# Handle a file
 | 
						|
# param file: the file to parse
 | 
						|
function HandleFile() {
 | 
						|
    file="$1"
 | 
						|
    # Sort out file metadata
 | 
						|
    dirtyshowname="$(echo "$file" | sed 's/.[Ss][0-9].[Ee][0-9].*$//')"
 | 
						|
    showname="$(ls -1 "$baseDir" | grep -iE "$dirtyshowname")"
 | 
						|
    epinfo="$(echo "$file" | sed "s/^${dirtyshowname}.//" | head -c 6)"
 | 
						|
    season="$(echo "$epinfo" | head -c 3 | tail -c 2)"
 | 
						|
    episode="$(echo -n "$epinfo" | tail -c 2)"
 | 
						|
    target="$baseDir"/"$showname"/Season\ "$season"
 | 
						|
    # Ensure metadata sorting didn't return nulls
 | 
						|
    for i in dirtyshowname showname epinfo season episode target; do
 | 
						|
        if [ -z "${!i}" ]; then
 | 
						|
            echo ERROR: Could not handle "$file" because we could not find $i
 | 
						|
            return
 | 
						|
        fi
 | 
						|
    done
 | 
						|
    # Make sure target exists
 | 
						|
    # Move file to target
 | 
						|
    if [ ! -d "$(dirname "$target")" ]; then
 | 
						|
        echo WARN -- could not find the right show to sort "$file"
 | 
						|
    fi
 | 
						|
    # Make sure the show folder exists
 | 
						|
    mkdir -p "$target"
 | 
						|
    mv "$file" "$target"
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
# Parse arguments.
 | 
						|
while getopts 'b:cf:hnqv' OPTION; do
 | 
						|
    case "$OPTION" in
 | 
						|
        b) baseDir="${OPTARG}" ;;
 | 
						|
        h) usage; exit 0 ;;
 | 
						|
        l) exec $0 $(echo $@ | sed "s/-s\s+${OPTARG}(.|$)//") | tee -a "${OPTARG}" ;;
 | 
						|
        n) nolock="1" ;;
 | 
						|
        q) exec $0 $(echo $@ | sed 's/-q//') &>/dev/null ;;
 | 
						|
        v) set -x ;;
 | 
						|
        *) usage; exit 1 ;;
 | 
						|
    esac
 | 
						|
done
 | 
						|
 | 
						|
cd /srv/yggdrasil/new_acquisition
 | 
						|
 | 
						|
echo INFO Unlocking filestore
 | 
						|
if [ `whoami` != "root" ]; then yggdrasil-unlock; fi
 | 
						|
 | 
						|
echo INFO Sorting....
 | 
						|
# Find all files matching *S??E??* syntax
 | 
						|
ls -1d *[S,s]??[E,e]??* 2>/dev/null | while read file; do
 | 
						|
     HandleFile "${file}"
 | 
						|
done
 | 
						|
 | 
						|
if [ -z "$nolock" ] && [ `whoami` != "root" ]; then
 | 
						|
    echo INFO Locking filestore
 | 
						|
    yggdrasil-lock &>/dev/null
 | 
						|
fi
 |