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 edit summary |
||
Line 18: | Line 18: | ||
==testfailid.sh== | ==testfailid.sh== | ||
<source lang="bash"> | |||
#!/bin/bash | #!/bin/bash | ||
rm -r *.mp3* | rm -r *.mp3* | ||
Line 35: | Line 36: | ||
echo $oldName | echo $oldName | ||
done | done | ||
</source> | |||
==renamer.sh== | ==renamer.sh== | ||
<source lang="bash"> | |||
#!/bin/bash | #!/bin/bash | ||
#Autor: René Pärnpuu | #Autor: René Pärnpuu |
Latest revision as of 10:11, 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
<source lang="bash">
- !/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