Gå til innhold

Script som oppretter mappestruktur til musikksamlinger fra ID3 tagger


Anbefalte innlegg

Hallo

Jeg har laget et bash script som lager en ny mappestruktur i musikkmappa

Det er ganske ferdig, men jeg vil gjerne ha litt innspill på hva jeg kan gjøre for å få det bedre.

 

Krever:

eyeD3

 

#!/bin/bash
TMPdir=".tmp"
MUSICdir=$TMPdir/"music"
OTHERdir=$TMPdir/"other"
mkdir "$TMPdir"
mkdir $MUSICdir
mkdir $OTHERdir

##Make filelistening file
find . -type f \( ! -regex '.*/\..*' \) | sed "s#^.#$(pwd)#" | grep -i .mp3 >$TMPdir/mp3files
##Make otherfileslistening file 
find . -type f \( ! -regex '.*/\..*' \) | sed "s#^.#$(pwd)#" | grep -vi .mp3 | grep -v $0 | grep -v Thumbs.db >$TMPdir/otherfiles

##Move otherfiles
while read FILE
do
mv -n "$FILE" $OTHERdir/
done < $TMPdir/otherfiles

##Move music files
while read FILE
do
artist=`eyeD3 --jep-118 "$FILE" | grep 'artist' | sed 's/  //' | sed -e 's/^<.*>\([^<].*\)<.*>$/\1/' -e 's/\///g' -e 's/%//g' -e 's/:/,/g' -e 's/\?//g' -e 's/\[//g' -e 's/\]//g'`
album=`eyeD3 --jep-118 "$FILE" | grep 'source' | sed 's/  //' | sed -e 's/^<.*>\([^<].*\)<.*>$/\1/' -e 's/\///g' -e 's/%//g' -e 's/:/,/g' -e 's/\?//g' -e 's/\[//g' -e 's/\]//g'`
title=`eyeD3 --jep-118 "$FILE" | grep 'title' | sed 's/  //' | sed -e 's/^<.*>\([^<].*\)<.*>$/\1/' -e 's/\///g' -e 's/%//g' -e 's/:/,/g' -e 's/\?//g' -e 's/\[//g' -e 's/\]//g'`

if [ "$artist" == '' ]
then
	echo 'Artist tag on ' $FILE ' was empty, aborting'
	exit 2
elif [ "$title" == '' ]
then
	echo 'Title tag on ' $FILE ' was empty, aborting'
	exit 2
fi
newFolder="$MUSICdir/$artist/$album/"
if  [ "$album" == '' ]
then
	newFolder="$MUSICdir/$artist"
fi
newFilename="$artist - $title.mp3"
target="$newFolder/$newFilename"
##Make new folder
mkdir -p "$newFolder"
##Move file
mv "$FILE" "$target"
chmod 644 "$target"
echo "Moved $newFilename (album: $album)"
done < $TMPdir/mp3files

##
find . -type f \( ! -regex '.*/\..*' \) | sed "s#^.#$(pwd)#" | grep -i .mp3 >$TMPdir/mp3files2
if [ -s $TMPdir/mp3files2 ]
then
echo 'All files was moved'
else
echo 'This files was not moved due to duplicate '
cat $TMPdir/mp3files2
fi

echo 'Remove folders'
echo 'Write "yes" to accept, "no" to abort'
while [ "$OK" != 'yes' ]
do
read OK
if [ "$OK" == 'no' ]
then
	echo 'Aborting'
	exit 0
elif [ "$OK" == 'yes' ]
then
	echo 'Removing...'
else
	echo '"yes" to continue, "no" to abort'
fi
done
for folder in *
do
rm -Rv "$folder"
done

##Make new folders
echo 'Done removing, moving back the new folders'

mv $MUSICdir/* ./

##Move other files
mkdir 'otherfiles'
mv $OTHERdir/* otherfiles/

echo 'Removing TMP folder'
rm $TMPdir -r
echo 'Done'
exit 0

 

En ting jeg ikke er helt fornøyd med er hvis artist taggen er tom, da bare quiter den. Forslag på endringer der?

 

Takker for alle innspill

AlecTBM

 

EDIT:

Endret metoden på hvordan scriptet mellomlagrer filene, nå bygger den mappe strukturen i .tmp

Samt at den nå renamer filene også i forhold til ID3, gjort for å hindre at duplikate filnavn skal gjøre at sanger forsvinner

Endret av AlecTBM
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...