cp och sort kombinerat?

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
gnys
Inlägg: 3
Blev medlem: 02 aug 2007, 19:04
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS

cp och sort kombinerat?

Inlägg av gnys »

Hej alla proffs.

Jag har ett litet problem.
Har en mp3-spelare som av någon anledning inte sorterar filer som jag vill, den sorterar på tidpunkt när filen sparades på enheten.
Detta gör att om man kopierar en ljudbok t.ex så kan filerna hamna i en spännande oordning, så att boken inte går att lyssna på. :(

Nu undrar jag om man kan använda kommandona cp och sort på något fiffigt sätt för att ordna detta t.ex:

Kod: Markera allt

 cp "filnamn" "filnamn" | sort
eller så.

Jag har sökt, men inte hittat något lämpligt, så det kanske inte går....
Vad säger ni som är proffs.

//Göran (inte så proffsig ännu :) )
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: cp och sort kombinerat?

Inlägg av mcNisse »

Spelaren sorterar garanterat på taggar. Vad är det för spelare?

cp tar filerna i bokstavsordning...

Edit: eyed3d är ett bra program för att hantera taggar från terminalen.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: cp och sort kombinerat?

Inlägg av Konservburk »

gnys skrev:Har en mp3-spelare som av någon anledning inte sorterar filer som jag vill, den sorterar på tidpunkt när filen sparades på enheten.
Detta gör att om man kopierar en ljudbok t.ex så kan filerna hamna i en spännande oordning, så att boken inte går att lyssna på. :(
Jag tvivlar på att din mp3-spelare sorterar efter tidpunkt (eller taggar). Jag misstänker att den inte sorterar alls, utan bara plockar filerna i den ordning de har i själva filsystemet. De flesta mp3-spelare brukar använda ett fat-filsystem där ordningen till att börja med sammanfaller med ordningen filerna skapades (i filsystemet). Men detta gäller bara om filsystemet är tomt från början och du inte ersätter gamla filer med nya.
gnys skrev:Nu undrar jag om man kan använda kommandona cp och sort på något fiffigt sätt för att ordna detta t.ex:

Kod: Markera allt

 cp "filnamn" "filnamn" | sort
Med rekursiv kopiering, dvs cp -r katalogA katalogB, så kopierar cp filerna i den ordning de har i filsystemet. I ext3-filsystem beror filordningen på en hash, vilket medför att kopieringsordningen verkar bli ytterst slumpmässig.

Men nu är det så att cp kopierar argumenten du ger den i tur och ordning. Exempelvis så kommer kommandot cp filB filA katalog att kopiera först filB och sedan filA till katalog. Så då ställer vi oss genast frågan hur man på bästa sätt ger cp alla filnamnen i rätt ordning? Behöver vi använda sort? Svaret är nej. Vi använder oss istället av en så kallad glob, vilket är en slags matchningsoperator som skalet i bokstavsordning expanderar till de filnamn som matchar.

Vi tar ett exempel som tydligör det hela:

Kod: Markera allt

$ mkdir fuskljudbok
$ touch fuskljudbok/{a..f}.mp3
$ ls -U fuskljudbok
b.mp3  f.mp3  a.mp3  d.mp3  e.mp3  c.mp3
Nu har jag med ls -U listat fuskkapitlen i den konstiga ordning de har i filsystemet.

Kod: Markera allt

$ cp -r fuskljudbok /media/mp3spelare/
$ ls -U /media/mp3spelare/fuskljudbok/
b.mp3  f.mp3  a.mp3  d.mp3  e.mp3  c.mp3
Vi ser här att den rekursiva kopieringen har bevarat den konstiga ordningen. Det blir till att göra om kopieringen med en glob istället:

Kod: Markera allt

$ rm -f /media/mp3spelare/fuskljudbok/*.mp3
$ cp fuskljudbok/*.mp3 /media/mp3spelare/fuskljudbok/
$ ls -U /media/mp3spelare/fuskljudbok/
a.mp3  b.mp3  c.mp3  d.mp3  e.mp3  f.mp3
Nu ligger filerna istället i en vettig ordning som även skraltiga mp3-spelare bör förstå sig på.

Men du får som sagt vara vaksam om du redan har filer på mp3-spelaren eftersom filordningen då inte är garanterad på något sätt:

Kod: Markera allt

$ rm -f /media/mp3spelare/fuskljudbok/c.mp3
$ touch /media/mp3spelare/fuskljudbok/g.mp3
$ ls -U /media/mp3spelare/fuskljudbok/
a.mp3  b.mp3  g.mp3  d.mp3  e.mp3  f.mp3
Kontrollera därför alltid ordningen med ls -U om du inte vill riskera att drabbas av obehagliga överraskningar.
gnys
Inlägg: 3
Blev medlem: 02 aug 2007, 19:04
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS

Re: cp och sort kombinerat?

Inlägg av gnys »

Jag är tacksam för att ni tar er tid med mig

Jag testade ditt förslag, men det blir inte bra. Är det något argument som du glömt för den där glob-kopieringen?
jag lade till -verbose för att se i vilken ordning filerna kopierades, och de blir kopierade i ordning..... ???
Vi ser här att den rekursiva kopieringen har bevarat den konstiga ordningen. Det blir till att göra om kopieringen med en glob istället:

Kod: Markera allt

    $ rm -f /media/mp3spelare/fuskljudbok/*.mp3
    $ cp fuskljudbok/*.mp3 /media/mp3spelare/fuskljudbok/
    $ ls -U /media/mp3spelare/fuskljudbok/
    a.mp3  b.mp3  c.mp3  d.mp3  e.mp3  f.mp3

Nu ligger filerna istället i en vettig ordning som även skraltiga mp3-spelare bör förstå sig på.

Kod: Markera allt

gnys@gnys-laptop-Ubuntu8-HH:~$ mkdir test1 test2
gnys@gnys-laptop-Ubuntu8-HH:~$ touch test1/{a..f}.mp3
gnys@gnys-laptop-Ubuntu8-HH:~$ ls -U test1
a.mp3  d.mp3  b.mp3  f.mp3  e.mp3  c.mp3
gnys@gnys-laptop-Ubuntu8-HH:~$ cp -r test1 test2/
gnys@gnys-laptop-Ubuntu8-HH:~$ ls -U test2/test1/
a.mp3  d.mp3  b.mp3  f.mp3  e.mp3  c.mp3
gnys@gnys-laptop-Ubuntu8-HH:~$ rm -f test2/test1/*.mp3
gnys@gnys-laptop-Ubuntu8-HH:~$ cp -v test1/*.mp3 test2/test1/
"test1/a.mp3" -> "test2/test1/a.mp3"
"test1/b.mp3" -> "test2/test1/b.mp3"
"test1/c.mp3" -> "test2/test1/c.mp3"
"test1/d.mp3" -> "test2/test1/d.mp3"
"test1/e.mp3" -> "test2/test1/e.mp3"
"test1/f.mp3" -> "test2/test1/f.mp3"
gnys@gnys-laptop-Ubuntu8-HH:~$ ls -U test2/test1/
a.mp3  d.mp3  b.mp3  f.mp3  e.mp3  c.mp3

Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: cp och sort kombinerat?

Inlägg av Konservburk »

gnys skrev:Jag testade ditt förslag, men det blir inte bra. Är det något argument som du glömt för den där glob-kopieringen?
jag lade till -verbose för att se i vilken ordning filerna kopierades, och de blir kopierade i ordning..... ???
Mitt förslag fungerar bara om destinationskatalogen ligger på ett fat-filsystem. Du verkar kopiera filerna till katalogen test2/test1/ som jag antar ligger på samma filsystem som källkatalogen test1/. Om det är ett ext3-filsystem så spelar det ingen roll i vilken ordning du kopierar eftersom filorningen i ett ext3-filsystem är helt oberoende av kopieringsordningen.

Du måste alltså kopiera till mp3-spelaren (eller något annat fat-filsytem) om du ska märka någon skillnad.
gnys
Inlägg: 3
Blev medlem: 02 aug 2007, 19:04
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS

Re: cp och sort kombinerat?

Inlägg av gnys »

Ahhh, sorry.

Det verkar fungera väldigt bra när man kopierar till ett fat-system. ;D
Hehe, man lär sig något nytt varje dag, tackar för hjälpen.

//Göran
Skriv svar

Återgå till "Terminalforum"