PowerShell: Rene Pärnpuu, renamer.sh
Kirjeldus
Skript otsib kaustast, kus ta ise asetseb ülesse kõik .mp3 laiendiga failid ning muudab nende failide nimesi kaotades ära üleliigsed märgid: ".,_?!#" jms ning numbrid/tühikud failide eest. Skripti eesmärk on teha koledatest failinimedest arusaadavamad failinimed. Skriptile on kaasa antud fail: testfailid.sh, mis tekitab näidisfaile, mille järgi veenduda skripti effektiivsuses või lihtsalt vaadata, kuidas ta töötab.
Ülesehitus
Skript võib töötada ilma sisendita, kuid kasutaja saab sisse anda ka folderi, lisades -d folder peale skripti käivituse käsku. Lisaks saab kasutaja kaotada failinimedest ära soovimatud sõnad ja tähed andes lihtsalt peale skripti käivitamise käsku või peale folderit sõna. Parameetrid peavad olema eraldatud tühikuga! Skript ei saa töödata, kui parameeter (folder) peale -d ei eksisteeri. Skript on täielikult kommenteeritud, et täpsem kirjelduse ja loogika saab välja lugeda kommenteerijadest.
Skripti kasutamise näited
Alati ennem järgnevaid käske pannes: ./testfailid.sh
./renamer.sh
./renamer.sh -d /home/tudeng/Music ( muudab kõik mp3 failide nimed /home/tudeng/Music folderis)
./renamer.sh a, b, c ( muutab skripti folderis olevad mp3 failide nimesi ning kustutab ära tähed: a, b ja c failinimest. NT: 1adbecf.mp3, pärast def.mp3)
./renamer.sh -d /home/tudeng/Music a, b, c ( teeb sama asja, mis ülalolev näide, kuid võtab failid teisest kohast)
testfailid.sh
- !/bin/bash
rm -r *.mp3* touch Type\ O\ Negative\ -\ 3\ 0\ i\ F.mp3 touch Type\ O\ Negative\ -\ Summer\ Breeze.mp3 touch Apocalyptica\ -\ Heat.mp3 . touch Apocalyptica\ -\ Seemann\ \[album\ Version\].mp3 touch 42\ on.mp3 touch abc.mp3 touch 21hey.mp3 touch a_b,c.mp3 touch roflabc.mp3 touch defabc.mp3 touch teabcst.mp3 find . -type f -name "*.mp3" | while read oldName do echo $oldName done
renamer.sh
- !/bin/bash
- Autor: René Pärnpuu
- Rühm: A21
- Script mp3 nimede muutmiseks.
directory=`dirname $0` #ütleme, et folder, kus script asub on sisend (algväärtustamine) if [ $# -gt 1 ]; #kui parameetreid on rohkem kui 1 then
if [ "$1" = "-d" ]; #kui esimene sisend on -d siis tähendab, et folder on kusagil mujal then if [ -d "$2" ]; #kontrollime, kas folder eksisteerib then directory=$2 #juhul, kui on olemas siis väärtustame else echo "ERROR: Directory does not exist.\n" #kuna kasutaja folder ei eksisteeri siis echo "Exiting program, no changes done!" #lõpetame programmi exit 0 fi fi
fi find . -type f -name "*.mp3" | while read oldName # otsi kõik failid, mis sisaldavad mp3e do
oldName=${oldName:2} # kaotab ära ./ newName="" #algväärtustame lõpliku failinime wasDir=0 mp3=$oldName for arg in $* # fori tsükkel, mis võtab ükshaaval skripti sisendeid do if [ "$arg" = "-d" ]; # kui taheti sisse anda folder then wasDir=1 # tõstame püsti lipu, et järgnev parameeter on folder elif [ $wasDir -eq 1 ]; then wasDir=0 # võtame maha lipu, et järgnevad parameetrid oleksid regexi jaoks! else mp3=${mp3//$arg/""} # kaotab failinimest ära skriptisisendi fi done mp3=`echo $mp3 | tr '[A-Z]' '[a-z]'` #muudame kõik tähed väikeseks mp3=`echo ${mp3//[._,#!?%]/" "}` #kaotab ära special characterid if [ "$mp3" = "mp3" ]; # kui failinimest ei ole midagi järgi enam, juhtub kui failinimi koosnebki ainult numbridest then continue # võtab järgmise sõna fi mp3=${mp3//" mp3"/".mp3"} # kuna punkt on kustutatud siis tekitame taas tagasi faili laiendi algus=0 # esimeste numbrite removemiseks ainult for sona in $mp3 # lõikame failinime sõnadeks do sub=0 #algväärtustame substringi asukoha char=0 #algväärtustame tähe if [ $algus -eq 0 ]; then while [ $char -gt -1 2>/dev/null ]; # kuni tegemist on numbriga do let sub=sub+1 #suurendame subi ühe võrra char=${sona:$sub-1:1} #võtame ükshaaval tähe sõnast if ! [ -n $char ]; then # kui täht on tühik
char=0 # väärtustame nulliks, et tsüklisse tagasi tuleks ja uue tähe võtaks continue
elif [ "$char" = "." ]; then # kontolllib kas failinimes on ainult numbreid
continue # sellisel juhul on kummalise nimega tegemist, aga siiski vajalik
elif [ "$char" = "[" ]; then
let sub=sub+1 nextLetter=${sona:$sub-1:1} char="$char$nextLetter"
elif [ "$char" = "(" ]; then
let sub=sub+1 nextLetter=${sona:$sub-1:1} char="$char$nextLetter"
fi char=`echo $char | tr '[a-z]' '[A-Z]'` # muudame tähe suureks algus=1 done else char=${sona:0:1}
if [ "$char" = "[" ]; then char=${sona:0:2} sub=2 elif [ "$char" = "(" ]; then char=${sona:0:2} sub=2 else sub=1 fi char=`echo $char | tr '[a-z]' '[A-Z]'` # muudame tähe suureks
fi sona=${sona:$sub} #võtame ülejäänud osa ilma suuretäheta newName="$newName$char$sona " #liidame uuele nimele sõna done newName=`echo $newName | sed 's/ *$//g'` # if [ "$newName" != " .mp3" ]; then if ! [ -f "$directory/$newName" ]; then #kui faili ei eksisteeri if [ -w "$directory/$oldName" ]; then #kui kasutajal on liigutamiseõigusi
mv -f "$directory/$oldName" "$directory/$newName" echo "'$oldName' succesfully renamed to '$newName'"
else
echo "ERROR: Can´t rename $oldName! No rights for file!"
fi else echo "File '$newName' already exists!" fi fi
done ls | grep mp3