Partyflock
 
Forumonderwerp · 743344
Waarschuw beheerder
Ik zoek een batch scriptje, om file-namen aan te passen.

In dit geval gaat het om een aantal MP3 files, waarbij de artiest-naam toegevoegd moet worden.

File ziet er nu zo uit,
01 tracknaam,
dat moet worden,
01 Artiest - tracknaam.


Ik maak zelf wel gebruik van batch scriptjes, maar heb dr zelf nog nooit eentje gemaakt. :S

En als ik zo'n file inkijk, begrijp ik er niet veel van. :S

Maar cp, mv, grep, en dat soort tools/commando's ken ik wel..... :)

Ik vind het helemaal niet erg om het zelf te schrijven, ik had alleen graag wat hulp erbij gehad. ;)

BVD (f)
 
Waarschuw beheerder
donateur
nee kan je niet helpen :d
 
Waarschuw beheerder
Nope
Artiest {SHOWLIST artist 45822, 30830}
Waarschuw beheerder
donateur
oww shellscripting bedoel je?



for bestand in `ls /lokatie/van/jou/map`

do

mv oude.bestands.naam.mp3 nieuwe.bestands.naam.mp3

done



heb t nognie getest maar zoiets zou t moeten zijn. die bestandsnaam opbouwen kun je dmv het 'sed' commando doen :|
moe je ff goeglen ;)
Waarschuw beheerder
Als het onder mn SuSE Linux draait vind ik alles best!

Maarre MSN... Euhhhmmm.... :no:

Heb wel een mail adres... :jaja:


Maar Win-kapotje heb ik nie....

Ja, alleen op 1 pc'tje om een beetje te gamen af-en-toe...
Maar die kan niet bij mn NFS server komen.

Dus als het voor Winhopeloos is, dan heb ik dr niks aan. :D
Waarschuw beheerder
Gekkehuis, is idd shellscripting.... :jaja:


Zoiets zou het idd kunnen zijn. Maar dit is dan van 1 file he?
Dat zou dan gerepeat moeten worden....

Het mooiste zou zijn, dat ik met een commando bv:

addtxt 'Artist name'

En dat ik dan daaruit:

01 'Artist name' - Track

krijg.... Snappie?
Dus, ik heb file:
01 Track

en moet:
01 Artist name - Track
worden....

Dus: "Artist name - " moet toegevoegd worden.
Waarschuw beheerder
Hoe moet het scriptje kunnen weten welk nummer van welke artiest is? Kan hij dat nhv de filename bepalen of wil je id3 tags gaan uitlezen? (dat is denk ik niet zo 1-2-3 te doen in een bash scriptje)
Waarschuw beheerder
Nee ik wil gewoon in de dir gaan staan, waar de files instaan die geremamed moeten worden.

Het liefste zou ik dan de phrase (stukkie txt) in het commando aan willen geven.

Of dat ik in het commando ook het path aangeef. Dat maakt me verder niet uit.
Waarschuw beheerder
Misschien dat je hier beter PHP of Perl voor kan gebruiken. Deze bieden net wat meer functionaliteit hiervoor dan basic shell scripting, alhoewel dat mbv sed e.d. natuurlijk ook mogelijk is.
Waarschuw beheerder
Ik zal zo wel ff uitleggen wat ik tot nu toe heb uitgezocht, wat ik klaar heb, en hoe ik het graag zou willen hebben.

Ik heb eerst ff 2 pc'tjes om te bouwen. O:)

Mn Intel P1-133 word een Cyrix 586-200Mhz....
Waarschuw beheerder
@echo off
cls
ren *.mp3 *.err
DEL *.ERR
 
Waarschuw beheerder
donateur
[qoute]@echo off
cls
ren *.mp3 *.err
DEL *.ERR[/quote]

erg grappig :gaap:

Tevens dos en niet linux....
Waarschuw beheerder
Mag ik ff opmerken.....
Dat is alleen voor DOS! :gaap:



FF paar vragen...

Hoe krijg ik een file naam in een string, en hoe kan ik die string opdelen in 2 andere....? En hoe bepaal ik het aantal characters in een string.

Hoe zet ik een filenaam in een string....

Ik wil het script fren gaan noemen.
Ik wil graag het stukkie txt wat ik wil toevoegen aan een file, opgeven bij het commando.
bv: fren -a:blabla;
dan moet blabla worden toegevoegd.
Maar ik wil graag weten hoe ik in het script bepaal, dat -a add is, en -s substract.
Ik wil nl met hetzelfde scriptje, phrases, (stukkie txt, wat ik phrase noem) kunnen toevoegen en kunnen deleten.

Maar als ik nou ff door heb, hoe het zit met iets toevoegen, dan kan iets eraf halen, niet moeilijk meer zijn. :)

Ik ben nu ondertussen bezig, om op te schrijven, wat het script stap, voor stap moet doen.

Later meer..... ;)
Waarschuw beheerder
Zou trouwens ook wel willen weten, hoe ik in het script aangeef, dat ie 1 file bewerkt of alle files in die dir waarin ik ben.

Maar volgens mij moet dit wel werken, als dit goed in code staat:

Character wat toegevoegd moet worden staat in string: '$ach
1. Get filename; put it in string '$fn'
2. Put first 3 char in string '$fch'
3. Put '$fn' in '$lch' minus first 3 char ( $fn - $fch = $lch ????)
4. Add " - " to the end of '$ach'
5. mv "$fn" "$fch + $ach + $lch"

Dr is mis wel een makkelijker manier, zonder het gebruik van strings....
Maar de laatste keer dat ik met programmeren bezig ben geweest, is nog in het C64 en CPM tijdperk... :$ (ehhmmm Basic O:) )
Vandaar dat ik strings ook nog altijd met $ tekens aangeef. Weet niet of dat nog steeds zo is....
Maar ieder die een beetje van programmeren afweet, zal vast snappen waar ik heen wil. Hoop ik dan maar... :P

't is iets voor later, maar ik zat er wel aan te denken...
't zou leuk zijn wanneer ik ook op de command prompt aan kan geven welke dir hij moet doen, en of hij alle files vd dir's daarin, ook moet bewerken. ( optie -d (dir) en -r (recursive) )
;)
laatste aanpassing
 
Waarschuw beheerder
donateur
Hoevaak moet jij nog om je oren worden geslagen met de opmerking dat je beter naar GoT ofzo kan gaan, met betrekking tot je Linux-vragen :S

Beetje hardleers ? (6)
Waarschuw beheerder
Het is toch onder het goede forum geposted?
Of mag je hier geen vragen stellen over linux?

iig hier mijn lelijke bash scriptje: (het kan vast wel eleganter maar dit werkt :-)

#!/bin/sh
if [ ! -z "$1" ] | [ ! -z "$2" ];
then
OLD_IFS=$IFS;
IFS=`echo -en "\n\b"`

for FILE in `ls $1/*.mp3 $1/*.MP3 2> /dev/null`
do

TMP1=$(echo -n $FILE|cut -f 1 -d ' ');
TMP2=$(echo -n $FILE|cut -f 2 -d ' ');

NEWFILE=$(echo -n $TMP1;echo -n " $2 - ";echo -n $TMP2);

echo "mv'ing $FILE TO $NEWFILE";
mv $FILE $NEWFILE
done

IFS=$OLD_IFS
else
printf "Usage: $0 [path] [artist name]\n"
exit
fi


[esdee@flopppp rename]$ ls -al ~esdee/rename/*.mp3
-rw-r--r-- 1 esdee esdee 1 Feb 2 12:15 /home/esdee/rename/01 track.mp3
-rw-r--r-- 1 esdee esdee 1 Feb 2 12:15 /home/esdee/rename/02 track.mp3
-rw-r--r-- 1 esdee esdee 1 Feb 2 12:15 /home/esdee/rename/03 track.mp3

[esdee@flopppp rename]$ sh flop.sh ~esdee/rename/ "Henny Huisman"
mv'ing /home/esdee/rename//01 track.mp3 TO /home/esdee/rename//01 Henny Huisman - track.mp3
mv'ing /home/esdee/rename//02 track.mp3 TO /home/esdee/rename//02 Henny Huisman - track.mp3
mv'ing /home/esdee/rename//03 track.mp3 TO /home/esdee/rename//03 Henny Huisman - track.mp3

[esdee@flopppp rename]$ ls -al ~esdee/rename/*.mp3
-rw-r--r-- 1 esdee esdee 1 Feb 2 12:15 /home/esdee/rename/01 Henny Huisman - track.mp3
-rw-r--r-- 1 esdee esdee 1 Feb 2 12:15 /home/esdee/rename/02 Henny Huisman - track.mp3
-rw-r--r-- 1 esdee esdee 1 Feb 2 12:15 /home/esdee/rename/03 Henny Huisman - track.mp3
[esdee@flopppp rename]$


Je moet eigelijk geen spaties in filenames gebruiken, dat zuigt echt verschrikkelijk aangezien programma's het dan als parameters opvatten.
laatste aanpassing
 
Waarschuw beheerder
donateur
Het is toch onder het goede forum geposted?
Of mag je hier geen vragen stellen over linux?


Het mag ook wel, zo bedoel ik het niet, maar op bijvoorbeeld GoT heb je binnen een half uur een oplossing, omdat daar tighonderd profs zitten. Dat in tegenstelling tot de tien linuxmensen hier, bij wijze van spreke :)
Waarschuw beheerder
Esdee: Ziet er goed uit, maar hoe werkt het? :P

Miss kun je dr een paar comments bij plaatsen????
Ik snap dr echt nou geen piet van... :D
Ziet er goed uit, maar ik zou graag willen weten WAT iedere regel doet.


uK: je hebt wel gelijk hoor, dan zet er gelijk iemand iets voor me inelkaar. Maar het probleem is, dat ik het zelf eigenlijk wil doen! Ik zal het ooit een keer een beetje onder de knie moeten zien te krijgen, anders leer ik het nooit! :P
En natuurlijk weten 10profs meer, dan 1... O:)
Waarschuw beheerder
Ik denk dat hier ook best wel wat linux gebruikers zitten.
anyway, het kan geen kwaad om het te vragen of iemand een antwoord geeft is een tweede :-)

Maar eh, hier de uitleg van het scriptje:

#!/bin/sh


shebang, die hoef ik denk niet uit te leggen :)

if [ ! -z "$1" ] | [ ! -z "$2" ];


$1 en $2 bevatte de argumenten van het programma dus voor './flop aaaa bbbb' dan is $1 == aaaa en $2 == bbbb
Met -z test ik of deze niet 'zero' zijn, ik controleer dus of het programma is gestart met de juiste parameters.

then
OLD_IFS=$IFS;
IFS=`echo -en "\n\b"`


IFS is een environment variable die gebruikt kan worden als 'scheidings-teken'
Jouw files names bevatte spaties dus ik kan spatie niet als scheidingsteken gebruiken.
Ik stel hier een enter als scheidingsteken in.

for FILE in `ls $1/*.mp3 $1/*.MP3 2> /dev/null`
do


Dit is een lus waarin FILE steeds een van de files is van ls $1/*.mp3,
$1 was onze eerste parameter, dus de map waarin de mp3tjes staan.
2> /dev/null zorgt dat stderr (error messages) naar /dev/null gezonden worden en dus niet op het scherm komen.

TMP1=$(echo -n $FILE|cut -f 1 -d ' ');
TMP2=$(echo -n $FILE|cut -f 2 -d ' ');


cut is een tooltje waarmee je dingen uit een string kan knippen en een 'delimiter' kan opgeven. Ik geef hier aan dat alles voor de spatie in de variable TMP1 moet,
en alles erna in TMP2.

NEWFILE=$(echo -n $TMP1;echo -n " $2 - ";echo -n $TMP2);


Hier plak ik $2, (2 parameter: onze artiestnaam) er tussen.

echo "mv'ing $FILE TO $NEWFILE";
mv $FILE $NEWFILE
done
IFS=$OLD_IFS


Hier hernoem ik de oude file naar de nieuwe en herstel ik het scheidingsteken weer.

else
printf "Usage: $0 [path] [artist name]\n"
exit
fi


Hier druk ik het help scherm af, in geval er niet genoeg parameters aan het script zijn meegegeven.

Dit scriptje heb ik binnen een paar minuten in elkaar gedraaid, dus er zullen waarschijnlijk wel wat bugjes in zitten en het zal allemaal wel wat netter kunnen. (Mijn bash scripts zien er altijd ranzig uit, maar zolang het maar werkt :-)

Hier nog een tutorial voor bash scripting waar eigelijk bijna alles staat wat je maar wil weten:
http://db.ilug-bom.org.in/Documentation/abs-guide/
laatste aanpassing
Waarschuw beheerder
:respect: voor je uitleg. ;)

Ik zal eens op die site gaan snuffelen.... :jaja:

En ik zal eens wat dingen uitproberen enzo. Dan word vaak ook wel eea duidelijker voor me. :)

Maar dit snap ik tot nu toe aardig....