[sh]MP3's opschonen

Pagina: 1
Acties:

  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05-2025

VROEM!

broembroem!

Topicstarter
Ik heb aan de ene kant een directory met losse MP3-tjes, zeg een stuk of 1000. Aan de andere kant een directory met gecategoriseerde MP3's. Wat ik wil maken is een script dat voor elke MP3 in de ongesorteerde directory kijkt of er ook al een exemplaar voorkomt in de gesorteerde directory. Als dat het geval is moet het liedje uit de losse directory verwijderd. Om fuckups te voorkomen wil ik voorlopig even dat hij alleen die bestandsnaam echo't.

Op dit moment heb ik een stukje script dat de losse dir doorzoekt en de naam van het liedje als parameter $LIEDJE en die naam vervolgens echo't.
code:
1
2
3
4
5
6
7
8
9
10
CAT=/mnt/install/MP3/gecategoriseerd/
LOS=/mnt/usb/mp3/los/los
LIEDJE=
#Plan is als volgt:
#Voor alle MP3's in LOS kijken of ze ook in CAT voorkomen.
#Zo ja, dan verwijderen uit LOS
cd $LOS
for LIEDJE in `find *.mp3` ; do
    echo $LIEDJE
 done

Probleem is nu dat $LIEDJE niet bestaat uit de volledige bestandsnaam, maar uit elk stukje bestandsnaam dat tussen spaties staat. Heeft iemand een idee hoe ik dit op kan lossen?

ieeeepppppp :P


  • Gotiniens
  • Registratie: November 2002
  • Laatst online: 22:12

Gotiniens

Fairly odd Tim

"ls -1 *.mp3"

dat moet het wel doen denk ik

edit: hmmm, nee doet het zelfde als jou oplossing

[ Voor 43% gewijzigd door Gotiniens op 21-06-2004 18:23 ]


  • Blaasvis
  • Registratie: November 2001
  • Laatst online: 19-02 09:30

Blaasvis

Cidora \o/

probeer met sed voor elke spatie een escape teken te zetten zo heb ik het in mijn scriptjes ook opgelost. ;)

Freedom is everything you need ; <moto-moi|afk> ik verkloot het gewoon nooit :P


  • smokalot
  • Registratie: Juni 2001
  • Laatst online: 15-01 22:00

smokalot

titel onder

neen, je moet gewoon quotes rond de backticks zetten:
for LIEDJE in "`find *.mp3`" ; do

It sounds like it could be either bad hardware or software


  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05-2025

VROEM!

broembroem!

Topicstarter
zo lijkt hij alle bestanden als een lange string achter elkaar uit te spuwen.

ff gecheckt: Ja, het is een lange string.
Als ik
code:
1
2
echo $LIEDJE
echo bla

geef krijg ik een lange lijst met liedjes en een enkele keer "bla" aan het eind.

Dat truukje met "sed" ga ik nog even uitstellen, ik snap de manpages er van niet zo een twee drie, dus probeer het liever nog even anders indien mogelijk.
Bovendien zitten er ook nog andere tekens als uitroeptekens e.d. in de filenames, dus dat kan ook nog feest worden.

[ Voor 91% gewijzigd door VROEM! op 21-06-2004 21:42 ]

ieeeepppppp :P


  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Dit werkt misschien wel:
code:
1
2
3
4
5
6
7
8
9
10
11
# 'find -print0' print alle bestanden gescheiden door een null character.
# 'xargs -0' verwacht alle argumenten gescheiden door een null character.
find *.mp3 -print0 | xargs -0 sh -c '
    while [ -n "$1" ]; # zolang $1 de naam van een mp3 bevat.
    do
        # vervang deze echo door wat je met elke mp3 wil doen.
        echo een mp3: "$1"
        # schuif alle variabelen een plaats op, $2 wordt $1 etc.
        shift
    done
' dummyarg

Die 'dummyarg' is nodig omdat $0 niet geshift wordt.

offtopic:
Je sig: "R. Oudkerk: Getallen zijn net bikini's, wat ze verbergen is belangrijker dan wat ze laten zien" klinkt in het nederlands toch lang niet zo mooi als het origineel:

Statistics are like bikinis. What they reveal is suggestive, but what they conceal is vital. ~Aaron Levenstein

[ Voor 46% gewijzigd door _Squatt_ op 21-06-2004 21:51 ]

"He took a duck in the face at two hundred and fifty knots."


  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05-2025

VROEM!

broembroem!

Topicstarter
He, dat lijkt oke te werken :)

@offtopic: Ik kende het origineel niet en ik trek gezeik over mijn sig niet zo best :P
Ik zal eens een nieuwe zoeken :)

ieeeepppppp :P


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Euh.
code:
1
2
3
for i in `blah`;
  do echo '$i'
done


Simpeler? :P

Oh, je bedoelt iets anders. Zoek naar 'IFS' in 'man bash' :)

[ Voor 36% gewijzigd door CyBeR op 21-06-2004 22:15 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


  • smokalot
  • Registratie: Juni 2001
  • Laatst online: 15-01 22:00

smokalot

titel onder

CyBeR schreef op 21 juni 2004 @ 22:12:
Euh.
code:
1
2
3
for i in `blah`;
  do echo '$i'
done


Simpeler? :P

Oh, je bedoelt iets anders. Zoek naar 'IFS' in 'man bash' :)
tussen enkele aanhalingstekens worden $variabelen niet vervangen door hun waarde.

It sounds like it could be either bad hardware or software


  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:58
Hey TS, kijk hier eens naar:
ge-flopt in "Het grote "handige scripts" topic"
Een script door mijzelf gemaakt, en in het handige scripts topic gezet. Misschien heb je er iets aan, hoef je zelf niet te klooien ;)

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

smokalot schreef op 22 juni 2004 @ 21:06:
[...]

tussen enkele aanhalingstekens worden $variabelen niet vervangen door hun waarde.
Woops, je hebt gelijk. Maar daar mogen ook "" gebruikt worden.
Anyway, dat was niet wat 'ie bedoelde. Wat wel bedoeld werd was de IFS var in bash, die gebruikt wordt om uit te zoeken wat er tussen fields staat. Standaard spaties, tabs en newlines. Maak daar alleen newlines van en je kunt find gebruiken in een for-loop :)

All my posts are provided as-is. They come with NO WARRANTY at all.


  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05-2025

VROEM!

broembroem!

Topicstarter
ge-flopt schreef op 22 juni 2004 @ 21:33:
Hey TS, kijk hier eens naar:
ge-flopt in "Het grote "handige scripts" topic"
Een script door mijzelf gemaakt, en in het handige scripts topic gezet. Misschien heb je er iets aan, hoef je zelf niet te klooien ;)
Die werkt, als ik hem goed snap, niet recursive. Mijn script talenten zijn bovendien nog niet zo gevorderd dat ik van elke regel snap wat er gebeurt.
Maar ik had er al naar gekeken :) Wil het alleen even zo proberen.

ieeeepppppp :P


  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:58
Inderdaad is hij niet recursief, maar ik denk dat deze wel met het veranderen van 1 regel te maken is. Als je het wilt weten:
verander in regel 36 het stukje ls -c1 $1 in find $1
dan is hij volgens mij wel recursief te zoeken.

  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05-2025

VROEM!

broembroem!

Topicstarter
ge-flopt schreef op 22 juni 2004 @ 22:22:
Inderdaad is hij niet recursief, maar ik denk dat deze wel met het veranderen van 1 regel te maken is. Als je het wilt weten:
verander in regel 36 het stukje ls -c1 $1 in find $1
dan is hij volgens mij wel recursief te zoeken.
Het probleem met find is dat als hij een mp3 find in de gecategoriseerde dir hij in de output niet alleen de naam van het bestand gooit, maar ook de volledige directory waar hij in staat.
Het is dan dus wat lastig vergelijken.

ieeeepppppp :P


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Kan best hoor.

code:
1
2
3
4
5
IFS="
"
for i in `find .`; do
  echo ${i//*\/}
done


Die newline in $IFS krijgen kost wat moeite...

[ Voor 29% gewijzigd door CyBeR op 23-06-2004 00:54 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05-2025

VROEM!

broembroem!

Topicstarter
Ik heb hem ik heb hem ik heb hem :) :) :)
Misschien een beetje lelijk, maar het werkt. Het gaat met 2 scripts, voorlopig even mp2filter en mp1filter genaamd.
mp2filter roept mp1filter aan
mp2filter definieert bepaalde variabelen en spuwt ze in een textbestandje zodat mp1filter ze makkelijk weer op kan halen (ik kon die variabelen niet anders door de quotes e.d. heen tillen). mp1filter doet weer dingen met die variabelen.
Anyway, genoeg geblaat, hier is de code 8)
mp2filter:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh
#Martijn's mp3 sorteer script
# 'find -print0' print alle bestanden gescheiden door een null character.
# 'xargs -0' verwacht alle argumenten gescheiden door een null character.
LOS=/root/los/
LOS2=/root/troep
GECAT=/mnt/install/MP3/
echo $LOS > /tmp/los.txt
echo $LOS2 > /tmp/los2.txt
echo $GECAT > /tmp/gecat.txt
cd $LOS
 
find *.mp3 -print0 | xargs -0 sh -c '
     
    while [ -n "$1" ]; # zolang $1 de naam van een mp3 bevat.
        do
        echo "$1" > /tmp/naam.txt
        /root/mp1filter "$1"
    # schuif alle variabelen een plaats op, $2 wordt $1 etc.
        shift
    done
' dummyarg

mp1filter:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh
#Martijn's mp3 sorteer script
#Met dank aan _Squatt_
#Gebruik samen met mp2filter
LOS="`cat /tmp/los.txt`"
LOS2="`cat /tmp/los2.txt`"
GECAT="`cat /tmp/gecat.txt`"
#echo $LOS
#echo $LOS2
#echo $GECAT
 
#echo Begin vind aktie
find $GECAT -name "$1" -print0 | xargs -0r sh -c '
LOS="`cat /tmp/los.txt`"
LOS2="`cat /tmp/los2.txt`"
GECAT="`cat /tmp/gecat.txt`"
MOVE="`cat /tmp/naam.txt`"
echo $MOVE
mv $LOS"$MOVE" $LOS2
'

Ik heb nog wat zoekakties proberen te doen voor willekeurige bestanden in de los en de los2 map en het resultaat lijkt perfect :)

ieeeepppppp :P


  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05-2025

VROEM!

broembroem!

Topicstarter
CyBeR schreef op 23 juni 2004 @ 00:49:
Kan best hoor.

code:
1
2
3
4
5
IFS="
"
for i in `find .`; do
  echo ${i//*\/}
done


Die newline in $IFS krijgen kost wat moeite...
Dat zijn codes waar mij het mij voorlopig nog even van gaat duizelen. Dat gedoe met al die tekens blinkt niet echt uit in duidelijkheid voor iemand met mijn l33t h4xx0r 5k1ll2 :+
Ik hou het, wanneer mogelijk, bij code die ik bij een paar weken later nalezen nog kan volgen.

[ Voor 12% gewijzigd door VROEM! op 23-06-2004 01:40 ]

ieeeepppppp :P


  • Kees
  • Registratie: Juni 1999
  • Laatst online: 22:33

Kees

Serveradmin / BOFH / DoC
code:
1
2
3
CAT=/mnt/install/MP3/gecategoriseerd/
LOS=/mnt/usb/mp3/los/los
ls -1 -R $CAT $LOS | sort | uniq -c | sort -n | tr '\t' ' ' | tr -s ' ' | grep -v '^ 1' | cut -d ' ' -f3-

Geeft bijna hetzelfde ;)

Als je dan de songs met

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • Tim
  • Registratie: Mei 2000
  • Laatst online: 04-08-2025

Tim

Ah, vele wegen lijden naar Rome zo te zien.. :)
Ik gebruik zelf altijd iets in de trand van:
code:
1
2
3
find *  | while read fn; do
 echo $fn
done

[ Voor 7% gewijzigd door Tim op 23-06-2004 11:29 ]

Pagina: 1