Massnamnbyte
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Massnamnbyte
Jag brukar använda GPRename för att byta namn på många filer samtidigt men den saknar en massa finesser, varav jag knappast kommer att behöva de flesta av dem, men just nu saknar jag en möjlighet att namnge ett antal länkar slumpmässigt. Det spelar mig ingen större roll vad filnamnen blir exakt, det kan vara enbart siffror eller vad som helst, men filtillägget ska inte ändras.
Jag har perl-varianten av rename installerad. Kan den vara en väg att gå? Förmodligen, men jag är för ovan vid perl-uttryck för att inse hur eller ens om det är möjligt att hantera slumpmässiga strängar på ett eller annat sätt.
Jag har perl-varianten av rename installerad. Kan den vara en väg att gå? Förmodligen, men jag är för ovan vid perl-uttryck för att inse hur eller ens om det är möjligt att hantera slumpmässiga strängar på ett eller annat sätt.
-
- Inlägg: 309
- Blev medlem: 09 dec 2008, 21:34
- OS: Xubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Ort: Trelleborg
Re: Massnamnbyte
Luktar regexp lång väg... och förvånansvärt mycket är möjligt med regexp:arJohnny Rosenberg skrev:Jag har perl-varianten av rename installerad. Kan den vara en väg att gå? Förmodligen, men jag är för ovan vid perl-uttryck för att inse hur eller ens om det är möjligt att hantera slumpmässiga strängar på ett eller annat sätt.

- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Massnamnbyte
Jag hänger inte riktigt med på vad du försöker åstadkomma. Varför vill du ha sumpmässiga namn? Är det så att du vill generera helt unika filnamn?Johnny Rosenberg skrev:Jag brukar använda GPRename för att byta namn på många filer samtidigt men den saknar en massa finesser, varav jag knappast kommer att behöva de flesta av dem, men just nu saknar jag en möjlighet att namnge ett antal länkar slumpmässigt. Det spelar mig ingen större roll vad filnamnen blir exakt, det kan vara enbart siffror eller vad som helst, men filtillägget ska inte ändras.
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Massnamnbyte
Jag bara vill det… Inte på hela hårddisken givetvis, utan bara i en enda mapp i experimentsyfte.Konservburk skrev:Jag hänger inte riktigt med på vad du försöker åstadkomma. Varför vill du ha sumpmässiga namn? Är det så att du vill generera helt unika filnamn?Johnny Rosenberg skrev:Jag brukar använda GPRename för att byta namn på många filer samtidigt men den saknar en massa finesser, varav jag knappast kommer att behöva de flesta av dem, men just nu saknar jag en möjlighet att namnge ett antal länkar slumpmässigt. Det spelar mig ingen större roll vad filnamnen blir exakt, det kan vara enbart siffror eller vad som helst, men filtillägget ska inte ändras.
Men det spelar ingen roll varför, för oavsett orsak ställde jag frågan för att jag ville veta svaret på den. Det jag vill åstadkomma kan jag åstadkomma på andra sätt, men nu vill jag veta om det går att åstadkomma det på just detta sättet, nämligen med en mapp en länkar som har slumpmässiga namn…
Om det inte går är det ju skönt att veta det så slipper man lägga ner hur många timmar som helst helt i onödan. Tänkte att någon kanske labbat med detta tidigare, men det är visst bara jag som kommer på så korkade idéer…
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Massnamnbyte
Jag skiter egentligen fullständigt i syftet. Men jag förstår fortfarande inte riktigt vad du vill göra? Jag frågade om de slumpmässiga namnen ska vara unika? Och om inte, vad gör du om det uppstår en namnkollision? Sen har vid det här med länkarna... hur kommer dessa in i bilden?Johnny Rosenberg skrev:Jag bara vill det… Inte på hela hårddisken givetvis, utan bara i en enda mapp i experimentsyfte.
Men det spelar ingen roll varför, för oavsett orsak ställde jag frågan för att jag ville veta svaret på den. Det jag vill åstadkomma kan jag åstadkomma på andra sätt, men nu vill jag veta om det går att åstadkomma det på just detta sättet, nämligen med en mapp en länkar som har slumpmässiga namn…
Det borde inte vara någon större svårighet att generera slumpmässiga filnamn/länknamn.Johnny Rosenberg skrev:Om det inte går är det ju skönt att veta det så slipper man lägga ner hur många timmar som helst helt i onödan. Tänkte att någon kanske labbat med detta tidigare, men det är visst bara jag som kommer på så korkade idéer…
Re: Massnamnbyte
Kanske du ska använda UUID (universally unique identifier). Det finns ett program som heter uuidgen som genererar slumpmässiga, unika namn/identifierare som du skulle kunna använda för att namnge dina filer.
Se "man uuidgen". Eller för den delen "apropos uuid".
Se "man uuidgen". Eller för den delen "apropos uuid".
-
- Inlägg: 309
- Blev medlem: 09 dec 2008, 21:34
- OS: Xubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Ort: Trelleborg
Re: Massnamnbyte
Tja, slumptal finns lite här och där...Johnny Rosenberg skrev:Jag bara vill det… Inte på hela hårddisken givetvis, utan bara i en enda mapp i experimentsyfte.
Men det spelar ingen roll varför, för oavsett orsak ställde jag frågan för att jag ville veta svaret på den. Det jag vill åstadkomma kan jag åstadkomma på andra sätt, men nu vill jag veta om det går att åstadkomma det på just detta sättet, nämligen med en mapp en länkar som har slumpmässiga namn…
Om det inte går är det ju skönt att veta det så slipper man lägga ner hur många timmar som helst helt i onödan. Tänkte att någon kanske labbat med detta tidigare, men det är visst bara jag som kommer på så korkade idéer…
Vad sägs om att leka lite med:
Kod: Markera allt
cat /dev/urandom > rand.txt
Dvs du kan läsa tecken för tecken från /dev/urandom och lägga dessa där du vill ha dom...
ovan fyllde bara en fil med slumpmässig data

Fast om du gillar perl mer så finns ju "rand" funktionen att tillgå,
här en liten grovhuggen som bara skriver ut några tecken...
Kod: Markera allt
#!/usr/bin/perl
$data = "";
for($i=0;$i<30;$i++)
{
$data .= sprintf("%c", (rand(25)+97));
}
print "random data: ".$data."\n";
/Johan
-
- Inlägg: 309
- Blev medlem: 09 dec 2008, 21:34
- OS: Xubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Ort: Trelleborg
Re: Massnamnbyte
Eller vad sägs om att göra båda på samma gång...?
Här har du ett fulhack som skapar en fil med ett slumpartat namn och sedan tar lite lagom med slumpmässig data att fylla den med
Totalt meningslöst, dock underhållande på något vis...
/Johan
Ett tips eftersom ovan fil är fylld med lite lagom märklig data, så kan du titta på denna med t.ex. hexdump eller dyl.
(Använd inte cat eller more om du inte känner till reset
)
Kod: Markera allt
#!/usr/bin/perl
$data = "";
for($i=0;$i<30;$i++)
{
$data .= sprintf("%c", (rand(25)+97));
}
print "random data: ".$data."\n";
system("head /dev/urandom > ".$data.".txt");

Totalt meningslöst, dock underhållande på något vis...
/Johan
Ett tips eftersom ovan fil är fylld med lite lagom märklig data, så kan du titta på denna med t.ex. hexdump eller dyl.
(Använd inte cat eller more om du inte känner till reset

- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Massnamnbyte
Låter trevligt…Konservburk skrev:Jag skiter egentligen fullständigt i syftet.

Jag har en mapp med en massa länkar. Dessa länkar leder alla till bilder i olika mappar. Jag kunde givetivis lika gärna kopierat alla bilderna till mappen, men jag tyckte det var onödigt slöseri med utrymme. En länk tar ju inte upp så värst många bytes.Konservburk skrev:Men jag förstår fortfarande inte riktigt vad du vill göra?
Nu vill jag inte att länkarna ska heta samma som filerna de pekar på och jag bryr mig inte heller om vad de heter, mer än att namnen ska vara slumpmässiga.
Ja, de ska vara unika, men om man bara låter namnen vara tillräckligt långa så blir ju sannolikheten obefintlig att två filer av ett hundratal skulle råka få samma namn. Det gör inget om namnet består av empelvis ett tjugotal siffror.Konservburk skrev:Jag frågade om de slumpmässiga namnen ska vara unika? Och om inte, vad gör du om det uppstår en namnkollision?
Det var väl mest det att jag från början pratade om filer men sedan kom på att det faktiskt var frågan om länkar istället. Det borde ju inte spela någon roll ur namnbytarsynpunkt heller, i och för sig.Konservburk skrev:Sen har vid det här med länkarna... hur kommer dessa in i bilden?
Och till sist, om någon vill veta vad jag är ute efter här, så är det bara en tokidé jag fick för att lösa ett litet problem. Jag skulle titta på en stor mängd valda bilder i F-spot, har jag för mig att det var. Tyvärr hittade jag inte något i någon inställning om hur man visar bilderna i slumpmässig ordning, vilket jag tyckte kändes lite sopigt. Alla liknande program jag tidigare använt för liknande ändamål, på den tiden i Windows, har haft den ”finessen”.
Så jag bara kände för att tillämpa en liten nödlösning, som gick ut på att jag samlade alla bilder i en mapp i form av länkar till de riktiga bilderna och tittade på dem i bokstavsordning. Om jag då hade slumpmässiga namn på bilderna (länkarna alltså) så skulle ju bildspelet också bli slumpmässigt (med den lilla begränsningen att det blir samma ordning varje gång). När jag då inte fann något enkelt sätt att göra detta på, alltså att byta namn på existerande filer eller länkar till ett slumpmässigt namn var jag ju bara tvungen att veta om det är möjligt och i så fall hur på enklaste sätt.
Visst visste jag att det var möjligt. Om inte annat kan man ju alltid knåpa ihop ett enkelt C-program som gör jobbet, men nu fick jag för mig att jag ville veta om någon visste något riktigt elegant sätt att göra detta på… Det är ju alltid lika frustrerande när man löst ett problem på ett tidsödande sätt och när man visar någon sin lösning, så säger vederbörande nästan alltid ”varför gjorde du inte så här istället” varpå han förslår en metod som är så enkel att man riktigt känner hur mycket tid man lagt ner helt i onödan…
På något märkligt sätt så är det alltid de meningslösa problemen som fångar min uppmärksamhet mest också, som man tydligt kan se här…
Tack för alla svar. Ska ta en titt och se om något känns mer ”rätt” för mig än de andra.
-
- Inlägg: 1269
- Blev medlem: 15 dec 2007, 03:20
- OS: Xubuntu
Re: Massnamnbyte
Om du vill använda perl-varianten av rename skulle du kunna göra nåt sånt här
Substituering med s/xxx/yyy/e gör att yyy inte är en sträng att substituera till utan ett uttryck vars värde används. Lägg till flaggorna -v för att se vad som händer och -n för att inte ändra några filnamn medan du testar uttrycken.
Obs ovanstående garanterar inte unika namn, och behåller inte filnamnsuffix. Denna bör ger unika namn:
Kod: Markera allt
prename 's/(.*)/sprintf("%03d",rand(1000))/e' *
Obs ovanstående garanterar inte unika namn, och behåller inte filnamnsuffix. Denna bör ger unika namn:
Kod: Markera allt
prename 's/(.*)/system("uuidgen")/e' *
-
- Inlägg: 1269
- Blev medlem: 15 dec 2007, 03:20
- OS: Xubuntu
Re: Massnamnbyte
Bildvisningsprogram finns det tretton på dussinet i förråden. Många kan slideshowa och många slumpvis skulle jag tro. (T.ex eog, gqview, feh, qiv, xli, m.fl. och (ahum) pornview)Johnny Rosenberg skrev:Om jag då hade slumpmässiga namn på bilderna (länkarna alltså) så skulle ju bildspelet också bli slumpmässigt
Exempel xli -delay 2 *.png visar bilder i bokstavsordning 2 sekunder var.
Man kan låta *.png komma i omvänd ordning med $(ls *.png | tac) eller slumpvis ordning med $(ls *.png | shuf). Exempel xli -delay $(ls *.png | shuf)
Man kan göra ls-ordningen slumpvis, inte genom att ersätta filnamnet utan genom att prefixa det med ett slumptal. Exempel prename 's/(.*)/sprintf("%03d-%s",rand(1000),$1)/e' *
Det blir slumpordnat men filnamnet finns kvar om man behöver identifiera filerna/länkarna.
Filnamn behöver oftast inte ha filtillägg. Xli i exemplen ovan (och de flesta program) öppnar gladeligen bilder av alla möjliga typer utan att bry sig om filtillägg. Tänk på filtillägg mer som en hjälp för människan att se vad det är för slags fil, eller som ett arv från Windows.men filtillägget ska inte ändras.
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Massnamnbyte
Kan i alla fall direkt utesluta Eog där, i alla fal den version som finns installerad som standard. Inställningar → Bildspel är bland de magraste jag sett. Går bara att ställa in tre saker och ingen av dem har med slumpmässighet att göra. De andra har jag inte provat, men den sistnämnda verkar ju vara en given kandidat att testa härnäst…David Andersson skrev:Bildvisningsprogram finns det tretton på dussinet i förråden. Många kan slideshowa och många slumpvis skulle jag tro. (T.ex eog, gqview, feh, qiv, xli, m.fl. och (ahum) pornview)
Jo, jag känner till detta. Utvecklarna av Eog verkar dock inte ha hört talas om det över huvud taget. Byt namn på en jpg till gif och Eog är totalt bortkollrad direkt. Jag har provat, så jag vet… Däremot testade jag nyss att skapa en länk till en bild, byta namn på den och helt slippa filtillägget. Då gick det bra, men när jag kallade den blaha.gif sket det sig. Snacka om lättlurad bildvisare…David Andersson skrev:Filnamn behöver oftast inte ha filtillägg. Xli i exemplen ovan (och de flesta program) öppnar gladeligen bilder av alla möjliga typer utan att bry sig om filtillägg. Tänk på filtillägg mer som en hjälp för människan att se vad det är för slags fil, eller som ett arv från Windows.
Tack alla för förslag och så vidare. Ska testa att byta namn på några länkar nu. Inte för att jag behöver det utan för att jag helt enkelt är så dum i huvudet att jag genomför alla idéer (nästan) jag får, hur korkade de än är…
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Massnamnbyte
Testade en variant som verkar funka i praktiken förutom en liten minidetalj, som jag inte lyckas komma runt riktigt bra:
Idén var att namnge länkarna (alla finns i samma mapp) i ordning med start på ”001”, men att göra det i slumpvis ordning. Alla länkar heter, som utgångspunkt, "Länk till $GammaltNamn".
Tänkte mig då en for-loop enligt följande:
Problemet är ju att länknamnen innehåller mellanslag, så allt som händer är att jag får en massa felmeddelanden om att det inte finns någon fil som heter ”Länk”, ingen som heter ”till” och så vidare.
Hittade på nätet några lösningar som går ut på att fippla med $IFS, men det funkade inte i mitt fall. Det blev snarare värre… då såg den även bokstaven ”ä” som ett skiljetecken. Så här såg annars exemplet ut som jag försökte utgå ifrån, som jag hittade på nätet:
Det verkar skita sig för mig i och med att jag använder ”$(uttryck)” istället för bara ”*”.
Visst kan jag i förväg byta namn på filerna så att de saknar mellanslag innan jag kör, men nu blev jag ju nyfiken på hur man löser problemet som just kom upp, inte hur man slingrar sig förbi det…
Syftet här är ju att jag är nyfiken och vill lära mig saker, oavsett om jag omedelbart ser någon praktisk nytta med det eller ej.
Idén var att namnge länkarna (alla finns i samma mapp) i ordning med start på ”001”, men att göra det i slumpvis ordning. Alla länkar heter, som utgångspunkt, "Länk till $GammaltNamn".
Tänkte mig då en for-loop enligt följande:
Kod: Markera allt
for a in $(ls Länk* | sort -R); do
diverse fjanterier
done
Hittade på nätet några lösningar som går ut på att fippla med $IFS, men det funkade inte i mitt fall. Det blev snarare värre… då såg den även bokstaven ”ä” som ett skiljetecken. Så här såg annars exemplet ut som jag försökte utgå ifrån, som jag hittade på nätet:
Kod: Markera allt
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in *
do
echo "$f"
done
IFS=$SAVEIFS
Visst kan jag i förväg byta namn på filerna så att de saknar mellanslag innan jag kör, men nu blev jag ju nyfiken på hur man löser problemet som just kom upp, inte hur man slingrar sig förbi det…
Syftet här är ju att jag är nyfiken och vill lära mig saker, oavsett om jag omedelbart ser någon praktisk nytta med det eller ej.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Massnamnbyte
Ett filnamn kan innehålla precis vilka tecken som helst utom / och nolltecken. Lösningen är därför att använda något av dessa tecken som separator. Har du hela sökvägar snarare än bara filnamn så kan du av uppenbara skäl inte använda /, och då återstår endast alternativet nolltecken.Johnny Rosenberg skrev:Visst kan jag i förväg byta namn på filerna så att de saknar mellanslag innan jag kör, men nu blev jag ju nyfiken på hur man löser problemet som just kom upp, inte hur man slingrar sig förbi det…
Man skulle kunna göra ungefär så här:
Kod: Markera allt
#!/bin/sh
find Länk* -maxdepth 0 -print0 |
sort -Rz |
xargs -0 sh -c '
for f
do
# diverse fjanterier
echo : "$f"
done
' :
Om du inte har något emot bash-specifik kod så kan du ta dig runt det problemet så här:
Kod: Markera allt
#!/bin/bash
while read -d '' f
do
# diverse fjanterier
echo : "$f"
done < <(
find Länk* -maxdepth 0 -print0 |
sort -Rz
)
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Massnamnbyte
Tack för alla intressanta förslag. Har testat en av två olika metoder nu och kom fram till en annan variant, med inspiration av de förslag jag fått här och med hjälp av lite annat jag hittat på nätet.
Eftersom jag inte kom på något lättläst sätt att fixa så att det funkar med mina filer, utan att först byta namn på dem, gick jag en liten omväg genom att jag sparar delresultat i filer, vilket givetvis försämrar prestandan, men koden ser inte fullt så kryptisk ut då. Den är alltså anpassad till mina högst bristfälliga kunskaper i skalprogrammering, så att säga.
Så här ser det ut i alla fall:
Ser kanske lite långt ut och det tog faktiskt några sekunder att byta namn på 289 filer, men det är väl så det blir när man bygger sina experiment enbart på kod man begriper sig på, om man som jag är på nybörjarstadiet - ett stadium jag aldrig tycks ta mig ur när det gäller skalskriptprogrammering…
Eftersom jag inte kom på något lättläst sätt att fixa så att det funkar med mina filer, utan att först byta namn på dem, gick jag en liten omväg genom att jag sparar delresultat i filer, vilket givetvis försämrar prestandan, men koden ser inte fullt så kryptisk ut då. Den är alltså anpassad till mina högst bristfälliga kunskaper i skalprogrammering, så att säga.
Så här ser det ut i alla fall:
Kod: Markera allt
#!/bin/sh
for a in Länk*; do
echo "$a"
done > .testfile
sort -R -o .randomfile < .testfile
count=1
while read oldname; do
newname="00"$count
length=$(($(echo $newname | wc -c)-1))
newname=$(echo $newname | cut -c$(($length-2))-$length)
mv "$oldname" "$newname"
count=$((count+1))
done < .randomfile
rm .testfile
rm .randomfile
-
- Inlägg: 1269
- Blev medlem: 15 dec 2007, 03:20
- OS: Xubuntu
Re: Massnamnbyte
Det där är alltså för att formattera ett tal så det blir tresiffrigt med inledande nollor. Det är var printf och sprintf är till för. Tror att de tre raderna kan ersättas medJohnny Rosenberg skrev:Kod: Markera allt
newname="00"$count length=$(($(echo $newname | wc -c)-1)) newname=$(echo $newname | cut -c$(($length-2))-$length)
Kod: Markera allt
newname=$(printf "%03d" $count)
- bbauto
- Inlägg: 1594
- Blev medlem: 11 dec 2006, 17:58
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Bromölla
Re: Massnamnbyte
Hinner inte läsa genom alla inlägg men vill flagga för "PrefixSuffix" som finns i förråden, om inte detta redan nämnts!? 

- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Massnamnbyte
Oj, visste inte att man kunde använda printf i sh-skript! Vad bra, det är jag ju van vid från C-programmering (som jag visserligen ägnade mig åt vid slutet av 1980-talet, men lite känner jag allt igen…)David Andersson skrev:Det där är alltså för att formattera ett tal så det blir tresiffrigt med inledande nollor. Det är var printf och sprintf är till för. Tror att de tre raderna kan ersättas medJohnny Rosenberg skrev:Kod: Markera allt
newname="00"$count length=$(($(echo $newname | wc -c)-1)) newname=$(echo $newname | cut -c$(($length-2))-$length)
(Är ofta misstänksam mot program som använder stora tjok av kod för ganska enkla sträng-manipulationer. Det är en sjuka jag har.)Kod: Markera allt
newname=$(printf "%03d" $count)
Fast syntaxen var ju inte riktigt samma som i C…
Önskar att det fanns något skalskriptspråk som såg ut exakt som ANSI-C, det hade gjort saker och ting otroligt mycket enklare än nuvarande flumspråk. I alla fall för mig, som är en gammal hund som vägrar att lära sig sitta…

Kommer ihåg när man fipplade lite i Unix, också i slutet av 1980-talet. Då var det csh och tcsh man lekte med och det var ju lite likt C, men det var ändå mycket som skiljde.
När jag läste lite C++, 1993 tror jag det var, var jag lite besviken att det ansågs dåligt att använda printf och att man skulle använda cout istället, men man vande sig vid det också, men då var man ju ung…
Ska testa lite printf nu… Några fler arv från C som kan vara värt att känna till?
Och jag gillar inte heller när enkla saker görs med till synes mycket kod. Vill ha det så smidigt som möjligt, så jag är tacksam för allt nytt som finns att lära.