PowerShell: Rene Pärnpuu, renamer.sh: Difference between revisions
Created page with '==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 …' |
(No difference)
|
Revision as of 10:03, 24 May 2011
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