Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [OPGELOST] Script gezocht voor hernummering van bestanden  (gelezen 687 keer)

Offline Pjotr

  • Lid
    • Makkelijke Linuxtips
[OPGELOST] Script gezocht voor hernummering van bestanden
« Gepost op: 2016/05/12, 11:06:15 »
Ik heb een goedkoop Chinees mp3-spelertje (via de FM) voor in de auto; zo'n dingetje van rond de vijf euro (inclusief verzendkosten). USB-stekkertje erin prikken met de mp3-tjes erop, en spelen maar.

Werkt best aardig, alleen de "willekeurige volgorde"-afspeelstand (random) werkt niet goed.

Daarom ben ik nu op zoek naar een script dat de namen van de mp3-bestanden op 't USB-stekkertje vervangt door willekeurige unieke nummers tussen de 1 en de 10.000. Zodat de gewenste willekeurige afspeelvolgorde daardoor vanzelf tot stand komt.

Kan iemand mij helpen aan zo'n script?
« Laatst bewerkt op: 2016/05/12, 18:09:42 door Pjotr »

Offline h2o

  • Lid
Werk laptops + werkstation: Debian Testing
Privé laptops: Debian Testing/Unstable
Test laptop: Diverse andere Linux distribities
Chromebooks: ChromeOS Flex

Offline Pjotr

  • Lid
    • Makkelijke Linuxtips
[OPGELOST] Re: Script gezocht voor hernummering van bestanden
« Reactie #2 Gepost op: 2016/05/12, 18:08:36 »
Bedankt voor het reageren!  :)

Dit heeft het opgelost:
find . -type f -name \*.mp3 | shuf | nl -n rz | sed -r 's/^(.*)\t(.*)\.([^.]*)$/mv -v "\2.\3" "\1.\3"/' | bash

Re: [OPGELOST] Re: Script gezocht voor hernummering van bestanden
« Reactie #3 Gepost op: 2016/05/12, 21:13:51 »
find . -type f -name \*.mp3 | shuf | nl -n rz | sed -r 's/^(.*)\t(.*)\.([^.]*)$/mv -v "\2.\3" "\1.\3"/' | bash
Logisch toch? :-)

Offline Pjotr

  • Lid
    • Makkelijke Linuxtips
Re: [OPGELOST] Re: Script gezocht voor hernummering van bestanden
« Reactie #4 Gepost op: 2016/05/12, 22:32:24 »
find . -type f -name \*.mp3 | shuf | nl -n rz | sed -r 's/^(.*)\t(.*)\.([^.]*)$/mv -v "\2.\3" "\1.\3"/' | bash
Logisch toch? :-)
Haha. Nou, ik begrijp er zelf absoluut geen barst van, geen ene mallemoer, maar het werkt wel.  =D

Ik heb deze toverspreuk gekregen van een gezaghebbend iemand van het internationale Mintforum. Een moderator met een indrukwekkende staat van dienst. Ik zal niet gauw iets overnemen wat ik niet begrijp, maar voor sommige betrouwbare deskundigen maak ik een uitzondering.

Ik heb 't inmiddels opgenomen in mijn webstek, want het is gewoon verd*md handig:
https://sites.google.com/site/computertip/faq#TOC-Hoe-plaats-ik-mp3-muziekbestanden-in-een-willekeurige-volgorde-op-een-USB-geheugenstaafje-
(punt 19, rechterkolom)
« Laatst bewerkt op: 2016/05/12, 22:37:06 door Pjotr »

Offline vanadium

  • Lid
Re: [OPGELOST] Script gezocht voor hernummering van bestanden
« Reactie #5 Gepost op: 2016/05/13, 14:49:35 »
'k heb het door  =D

Voor Wie Ooit Geïnteresseerd Mocht Zijn Hoe Het Werkt :evil:

Belangrijk dat je weet dat | verschillende commando's scheidt, en, meer nog, de uitvoer van het commando ervoor doorgeeft naar het commando erna. Eens je dat weet, is alles zo klaar als een klontje.  :rolleyes:

"find" zoekt natuurlijk de betreffende mp3 bestanden, maar dat had iedereen wel door.  ;) Dat levert een lijst van bestanden op.

shuf is een klein programmaatje dat bij iedereen zonder dat hij het weet standaard geïnstalleerd is. Alleen de terminal guru's,  zoals Pjotr tegenkwam,  weten dit. Het programmaatje gooit de lijnen van een bestand willekeurig door elkaar. In dit geval zijn het de namen van de mp3 bestanden die in een willekeurige volgorde gezet worden.

Die door elkaar gehaspelde lijst gaat naar nl. Neen, heeft niets met Nederland of Ubuntu Nederlands te maken. Het commando "nl" nummert lijnen ("number lines", heb je hem?) in een tekstbestand. De nummers worden vooraan de lijn ingevoegd, gevolgd door een tab en dan de oorspronkelijke lijn.

Dan komt het moeilijkste ...

sed zoekt en vervangt in tekst. Veel moeilijke aspecten in dit commando! Tussen de aanhalingstekens staat alles wat het commando moet doen: 's/<wat je zoekt>/<wat je vervangt>/'. Het begint met wat gezocht wordt:  ^(.*)\t(.*)\.([^.]*)$. Eender welk en gelijk hoeveel karakters (.*) vanaf het begin ($) tot aan een tab teken (\). Dat is het lijnnummer. De haakjes rond .* maken daar een "groep" van, zodat je dat in het vervanggedeelte kan invoegen met het teken \1.

Eerst wordt vanaf het begin (^) gezocht tot aan tab (\t). Dit levert het nummer (groep 1, \1) op. Dan wordt alles na de tab tot een punt (\.) opgezocht en gegroepeerd (\2). Dit is de bestandsnaam. Tenslotte wordt vanaf de punt tot het einde van de string gezocht: dit levert de extensie op (\3).

In het 'vervang' gedeelte van sed kunnen die groepen nu van plaats veranderd worden. De vervangopdracht maakt eigenlijk een reeks "hernoem" (move, mv) commando's aan. Als eerste argument van het hernoemcommando wordt de bestandsnaam doorgegeven (naam, punt, extensie: \2.\3). Dan volgt de nieuwe naam: het lijnnummer en de extensie (\1.\3).

De uitvoer van sed is dus een lijst van commando's die 'gevoed' worden aan de commandoshell bash, die tot slot de hernoemcommando's één voor één uitvoert.

Logisch toch? :-)

Probeer dát eens onder Windows!

Ter leering ende vermaeck.   :)

Offline TopGear

  • Forumteam
Re: [OPGELOST] Script gezocht voor hernummering van bestanden
« Reactie #6 Gepost op: 2016/05/13, 15:18:31 »
Eigenlijk nog best interessant om te zien hoe dat commando opgebouwd is. Dank, vanadium.

Offline testcees

  • Documentatieteam
    • testcees
    • www.testcees.nl
Re: [OPGELOST] Script gezocht voor hernummering van bestanden
« Reactie #7 Gepost op: 2016/05/13, 15:32:12 »
Probeer dát eens onder Windows!
Dat kan met Ubuntu voor Windows 10!  :P
Klik links bovenin op Documentatie

Offline Pjotr

  • Lid
    • Makkelijke Linuxtips
Re: [OPGELOST] Script gezocht voor hernummering van bestanden
« Reactie #8 Gepost op: 2016/05/13, 15:33:02 »
Bedankt, vanadium!  :)

Offline vanadium

  • Lid
Re: [OPGELOST] Script gezocht voor hernummering van bestanden
« Reactie #9 Gepost op: 2016/05/13, 17:45:23 »
Probeer dát eens onder Windows!
Dat kan met Ubuntu voor Windows 10!  :P
Verrek! Je hebt nog gelijk ook!  :D

Offline h2o

  • Lid
Re: [OPGELOST] Script gezocht voor hernummering van bestanden
« Reactie #10 Gepost op: 2016/05/13, 21:13:52 »
Heldere uitleg Vanadium, chapeau!!

Dat pipeteken | was mij al bekend en gebruik ik in diverse scripts. Het pipeteken geeft je heel veel mogelijkheden in script programmeerwerk en kan je veel werk uit handen nemen. Zeker in combinatie met het > doorgeefteken.

Ik heb er hier een paar die ik gebruik bij het klonen van partities of te terugzetten hiervan:

Citaat
dd if=/dev/sda1 | pv -s 8G |gzip > rufus64-dd.img.gz
gzip -dc rufus64-dd.img.gzip | pv -s 8G | dd of=/dev/sda1

dd if=/dev/xx | pv -s XXG |dd of=/dev/xx
dd if=/dev/xx | pv -s XXG |dd of=xx.img
dd if=/dev/xx | pv -s XXG | dd of=/dev/xx
dd if=xx.img| pv -s XXG | dd of=/dev/xx

partclone.ext4 -c -s /dev/sda1 | gzip > kleopas32.img.gz
zcat kleopas32.img.gz | partclone.ext4 -r -o /dev/sda1

dd if=/dev/sda of=kleopas32-wheezy-mbr.bak bs=512 count=1
dd if=kleopas32-wheezy-mbr.bak of=/dev/sda bs=512 count=1

Heel makkelijk werken zo vanaf de commandline en sneller dan Clonezilla.

Misschien ga ik het nog een keer toelichten..... Ben nu te moe hiervoor.
Werk laptops + werkstation: Debian Testing
Privé laptops: Debian Testing/Unstable
Test laptop: Diverse andere Linux distribities
Chromebooks: ChromeOS Flex

Re: [OPGELOST] Script gezocht voor hernummering van bestanden
« Reactie #11 Gepost op: 2016/05/14, 14:22:23 »
Logisch toch? :-)
Ja dat zei ik! ;-) Vanadium, nu je toch bezig bent, ik zie niet helemaal goed wat er in onderstaande sub ocr gebeurt, dus als je effe hebt... Komt hier vandaan:
http://www.drdobbs.com/the-fourth-annual-obfuscated-perl-contes/199101795


#!/usr/bin/perl -l

print ocr(<<TPJ);
 #  # # ## ##  ## ##  #    #  #  # # ##  #  #  #  #
### # # #  # # #  # # #    # # # # # # # ## # # # #
 #  ### ## ##  ## ##  #    # # # # # ##  # ## ### #
 #  # # #  #   #  # # #  # # # # # # # # #  # # # #
 #  # # ## #   ## # # ## ###  #  ### # # #  # # # ##
TPJ

sub ocr{@{$-[$@++]}=split$,for(split'\n',shift);for$@(0..4){for(0..51){++$_{$_
 }if($-[$@][$_]=~$")}}@&=(-1);for(sort{$a<=>$b}keys%_){push@&,$_ if($_{$_}>4)
  }push@&,52;for$@(0..13){@{$|[$@][$_]}=@{$-[$_]}[$&[$@]+1..$&[$@+1]-1]for(0..
   4)}for(@|){**=$_;$w=@{$*[$^=$$=0]}-1;for$@(0..4){for(1..$w){$^++if$*[$@][$_
    ]ne$*[$@][$_-1]}}for(0..$w){for$@(1..4){$$++ if$*[$@][$_]ne$*[$@-1][$_]}}
     for(0..20){push@},chr$_+65if(7*(8,4,2,9,2,3,7,8,1,$@,5,4,9,10,10,6,3,8,4,
      8,8)[$_]+(5,8,3,3,4,2,1,2,8,2,7,1,5,4,6,$@,3,6,8,4,1)[$_]==7*$^+$$)}}@}}

Offline vanadium

  • Lid
Re: [OPGELOST] Script gezocht voor hernummering van bestanden
« Reactie #12 Gepost op: 2016/05/14, 14:40:43 »
Ja dat zei ik! ;-) Vanadium, nu je toch bezig bent, ik zie niet helemaal goed wat er in onderstaande sub ocr gebeurt, dus als je effe hebt...
Subiet zit ik achter je aan!  :evil:  :laugh: