Någon som använt detta program för att namnge/namnändra många filer på en gång? Problemet är att det saknas hjälp. Jag har experimenterat lite och funnit lite olika saker:
[N] - Filens gamla namn, exempelvis "MinFil.txt".
[C] - Räknare, startar på 1. Exempel: "Jag i Säffle [c].jpg" ger som resultat att första filen kommer att heta "Jag i Säffle 1.jpg", nästa fil kommer att heta "Jag i Säffle 2.jpg" och så vidare.
- Filens gamla namn, exempelvis "MinFil".
[E] - Filens gamla suffix, exempelvis "txt".
.[e] ger samma resultat som [n]. Versaler eller gemener verkar inte spela någon roll.
Vad jag vill åstadkomma, vilket jag enkelt lyckats med i andra program (som dock bara finns för Windows, tror jag), är att få räknaren att börja på något annat än 1. Just nu skulle 312 vara önskvärt, exempelvis.
Någon som vet om detta är möjligt eller om jag hellre ska leta efter något annat program?
Det står ju att programmet ska vara väldigt avancerat, så jag utgår ifrån att man kan göra detta, för annars är det ju inte avancerat alls, bara korkat. Har ju provat rena skräpprogram som klarar detta, om än inte alltid på det elegantaste sättet.
Purrr 0.5.1, någon som använder detta och vet en del om det?
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
-
- Inlägg: 1818
- Blev medlem: 10 feb 2007, 04:08
- OS: Ubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Kontakt:
SV: Purrr 0.5.1, någon som använder detta och vet en del om det?
Vid sådana här situationer kan Linux kan vara synnerligen användbart
Jag är lite rostig på att skriva skript, men nedanstående försök till skript kopierar i alla fall filerna i mappen till filnamn med ordningsnummer. Skript startas med ./namnet-på-skriptfilen. Man måste också först skriva "chmod +x namnet-på-skriptfilen" för att den skall bli exekverbar.
Det går naturligtvis att starta räknaren på 312 eller ändra lite i skriptet så det lägger till en oföränderlig del till filnamnet.

Kod: Markera allt
#!/bin/bash
count=0
for file in `ls` ; do
cp $file $count
count=`expr $count + 1`
done
Senast redigerad av 1 ycc, redigerad totalt 22 gånger.
Ubuntu/Linux - Grunder: En introduktion till Ubuntu och Linux
Ubuntu/Linux - Basics: An introduction to Ubuntu and Linux (experimental, automated translation)
Ubuntu/Linux - Basics: An introduction to Ubuntu and Linux (experimental, automated translation)
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
SV: Purrr 0.5.1, någon som använder detta och vet en del om det?
Tackar!ycc skrev: Vid sådana här situationer kan Linux kan vara synnerligen användbartJag är lite rostig på att skriva skript, men nedanstående försök till skript kopierar i alla fall filerna i mappen till filnamn med ordningsnummer. Skript startas med ./namnet-på-skriptfilen. Man måste också först skriva "chmod +x namnet-på-skriptfilen" för att den skall bli exekverbar.
Det går naturligtvis att starta räknaren på 312 eller ändra lite i skriptet så det lägger till en oföränderlig del till filnamnet.Kod: Markera allt
#!/bin/bash count=0 for file in `ls` ; do cp $file $count count=`expr $count + 1` done
En följdfråga bara: Kan ett skript ta argument? Hur skriver man i så fall skriptet så att man kan använda dessa argument?
Bara för att visa lite vad jag är ute efter, så kommer här ett exempel som är i närheten av vad jag är ute efter:
I en mapp har jag en mängd filer av samma filtyp. Spelar ju ingen roll vilken typ, men säg jpg.
Dessa är namngivna på ett enhetligt sätt, i detta exempel kan vi säga att de heter "Nummer ###.jpg" för att inte krångla till det i onödan.
Då och då kommer nya bilder till mappen, kopierade från en digitalkamera. Dessa filer har då givetvis andra namn, typ DSC07039.JPG. I detta fall heter den sista ordinarie bildens "Nummer 311.jpg" och jag önskar fylla på där. Det är dock inte säkert att alla nummer finns med, så därför måste jag kunna styra det hela lite manuellt. Anta exempelvis att jag inte vill att någon fil ska heta "Nummer 317.jpg", så vill jag kunna köra ett skript på följande sätt (vilket är förklaringen till att det skulle vara praktiskt om skriptet kan ta argument):
./MittSkript DSC07039 DSC07044 312
Det är inte heller säkert att alla filer mellan DSC07039.JPG och DSC07044.JPG existerar, så vad ovanstående försök till kommando skulle innebära i mitt fall är följande:
"Byt namn på alla filer som heter DSC07039.JPG upp till DSC07044.JPG så att första filen heter Nummer 312.jpg". På så vis kan jag därefter fortsätta med fler filer med exempelvis:
./MittSkript DSC07046 DSC07099 325
Okej, nu ber jag ingen att skriva ett färdigt skript åt mig. Exemplen var enbart för att visa principen för vad jag är ute efter. Några enkla ledtrådar så är jag förmodligen igång på egen hand och kan troligen få såpass stor förståelse för hur skripten fungerar att jag kan göra nya när nya behov uppstår. I detta fallet gällde bara frågan om och hur man kan få skriptet att acceptera argument från användaren, ungefär som man kan i C och förmodligen alla andra programspråk.
Hm... i och för sig så borde jag ju kunna knåpa ihop något i C annars. Har ju trots allt läst C på högskola, även om det var 1986 ungefär... =P Men det var inte i Unix utan i Primos - operativsystemet som de flesta glömt idag. När skolan hade bytt till Unix hade jag redan slutat, men jag var ändå där ibland och försökte få klart examensjobbet och några andra smågrejer och då fick man ju försöka förstå Unix så gott det gick. Det blev mycket MUD och IRC på den tiden också. Två fina skandinaviska påhitt (MUD från Lars Pettersson i Göteborg och IRC nånstans i Finland om jag inte minns fel).
Försök nu filtera mitt pladder från den egentliga frågan om ni kan...

Och tack för idén med skript! Att jag inte tänkte på det... Man är ju förstörd av Windows kanske, man är van vid att få allt färdigt. Vad man än vill ha så har någon annan redan skapat ett gratisprogram för det... Men i Linux har vi ju rätt kraftfulla textkommandon, så vad jag förstått så kan jag exempelvis ersätta min användning av ett program jag har för säkerhetskopiering i Windows (Cobian Backup) med ett enkelt cp i terminalen, med lite flaggor som ser till att bara ändrade filer kopieras och så vidare. Det kan man i och för sig i DOS också, men när man körde windows drog man sig ju för att använda kommandoprompten, kommer inte riktigt ihåg varför. För att den var värdelös kanske, exempelvis när man skulle ange långa filnamn, exempelvis MinFil~1.txt om filen egentligen hette MinFilÄrSåHimlaIntressant.txt. Nu störs jag bara lite av det faktum (?) att jag måste skriva en \ framför varje mellanslag i ett filnamn, eller kan jag ange filnamnet som det är om jag innesluter det i citattecken?
Kan jag exempelvis skriva cd "/home/guraknugen/Min alldeles speciella mapp" istället för cd /home/guraknugen/Min\ alldeles\ speciella\ mapp? Fast i och för sig spelar det ingen roll, för oftast använder man ju ändå TAB-tangenten för att få ut sina långa mappnamn i text och då blir det ju ändå som det blir...
Vänliga hälsningar
Johnny Andersson
-
- Inlägg: 1818
- Blev medlem: 10 feb 2007, 04:08
- OS: Ubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Kontakt:
SV: Purrr 0.5.1, någon som använder detta och vet en del om det?
Argumenten till skriptet nås med $1, $2 ... Söker man i Google på "bash script tutorial" så kommer det ju upp en hel del studiematerial 
Jag skulle tro att i grunden så går det att fortsätta på det skriptet jag började på. Byta ls mot ls DSC*, byta count=0 mot count=$1, byta
cp $file $count
mot
cp $file "Nummer "$count
Men man tänker lätt fel innan man provat så jag lämnar över till dig att testa.
mmv är ett annat sätt att byta namn på stora filmängder. Där kommer man åt wildcards (*, ?, []) på ett fiffigt sätt. Första wildcard man använder kallas sedan \#1, andra kallas \#2 etc:
Här placeras alltså sista tecknet först i filnamnet om det är en siffra.
Jag tror man kommer ganska långt med dessa metoder. Lär man sig sedan någon av editorerna Vi eller Emacs med sina "regular expressions" så går det att göra nästan "allt". (Det finns också rename-skript att ladda ner från nätet som klarar "regular expressions".)
Därefter kan man lära sig grep, sed, awk ...
Som sagt, när det gäller att trixa runt med textsträngar så finns det resurser i Linux
Fast med wildcards, enkla skript och ev. mmv så tror jag man klarar sig praktiskt.

EDIT: Perl skall väl också stå med i listan över vad man kan använda, det är ju lite modernare än det jag räknade upp ovan.

Jag skulle tro att i grunden så går det att fortsätta på det skriptet jag började på. Byta ls mot ls DSC*, byta count=0 mot count=$1, byta
cp $file $count
mot
cp $file "Nummer "$count
Men man tänker lätt fel innan man provat så jag lämnar över till dig att testa.

mmv är ett annat sätt att byta namn på stora filmängder. Där kommer man åt wildcards (*, ?, []) på ett fiffigt sätt. Första wildcard man använder kallas sedan \#1, andra kallas \#2 etc:
Kod: Markera allt
$ ls
anders1 bertil8 cesar4 skript slask slisk slusk
$ mmv \*[0-9] \#2\#1
$ ls
1anders 4cesar 8bertil skript slask slisk slusk
Jag tror man kommer ganska långt med dessa metoder. Lär man sig sedan någon av editorerna Vi eller Emacs med sina "regular expressions" så går det att göra nästan "allt". (Det finns också rename-skript att ladda ner från nätet som klarar "regular expressions".)
Därefter kan man lära sig grep, sed, awk ...
Som sagt, när det gäller att trixa runt med textsträngar så finns det resurser i Linux

Fast med wildcards, enkla skript och ev. mmv så tror jag man klarar sig praktiskt.
I det fallet tror jag både " och ' funkar eftersom inga variabler ingår i strängen.guraknugen skrev: Kan jag exempelvis skriva cd "/home/guraknugen/Min alldeles speciella mapp" istället för cd /home/guraknugen/Min\ alldeles\ speciella\ mapp?
Instämmer, jag medguraknugen skrev: Man är ju förstörd av Windows kanske, man är van vid att få allt färdigt. Vad man än vill ha så har någon annan redan skapat ett gratisprogram för det...

EDIT: Perl skall väl också stå med i listan över vad man kan använda, det är ju lite modernare än det jag räknade upp ovan.
Senast redigerad av 1 ycc, redigerad totalt 22 gånger.
Ubuntu/Linux - Grunder: En introduktion till Ubuntu och Linux
Ubuntu/Linux - Basics: An introduction to Ubuntu and Linux (experimental, automated translation)
Ubuntu/Linux - Basics: An introduction to Ubuntu and Linux (experimental, automated translation)
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
SV: Purrr 0.5.1, någon som använder detta och vet en del om det?
Tack för alla tips! Ska se vad jag kan få ut av det.
Johnny
Johnny