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:
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.