ubuntuusers.de

Bash Variable bearbeiten

Status: Gelöst | Ubuntu-Version: Server 13.04 (Raring Ringtail)
Antworten |

phreak1n

Anmeldungsdatum:
2. Mai 2009

Beiträge: 16

Hallo,

ich habe ein kleines Problem und Google will mir nicht helfen (bzw. ich suche mal wieder nach dem falschen...).

Ich bastel mir grade ein Script, welches meine Faxe fortlaufend nummerieren soll.

Die aktuelle zahl möchte ich von der letzten erstellten Datei aus dem namen nehmen und anschließend +1 rechnen.

Mein Problem ist das meine Variable noch den ganzen Dateinamen enthält, ich allerdings nur die Zahl gebrauchen kann und nicht weiß wie ich die Variable so verarbeitet bekomme das nur noch die zahl übrig bleibt. Mein bisheriges Script sieht so aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash


function get_num
        {
        cd /pub/calli/sortieren/sort/
        num=`ls |sort -t '_' -n -k 2 | tail -n 1`
        }

get_num

#echo $num

cd /pub/calli/sortieren/to_sort/

for File in "*.pdf";
do
num=$((i+1));
mv $File "/pub/calli/sortieren/sort/arch"$num".pdf"
done

Die Datein heißen arch00000001.pdf und aufwärts

Ich hoffe Ihr könnt mir mit nen Tipp oder Link helfen.

Danke fürs lesen, calli

Keba Team-Icon

Ehemalige
Avatar von Keba

Anmeldungsdatum:
24. Juli 2007

Beiträge: 3802

Hallo,

phreak1n schrieb:

ich habe ein kleines Problem und Google will mir nicht helfen (bzw. ich suche mal wieder nach dem falschen...).

Diese Seite 🇬🇧 ist super für sowas.

Mein Problem ist das meine Variable noch den ganzen Dateinamen enthält, ich allerdings nur die Zahl gebrauchen kann und nicht weiß wie ich die Variable so verarbeitet bekomme das nur noch die zahl übrig bleibt. Mein bisheriges Script sieht so aus:

$ num=arch00000001.pdf
$ echo ${num:4:(-4)}
00000001

Das „löscht“ einfach die ersten und letzten 4 Chars.

Soweit zu der Frage, dein Skript erscheint mir aber generell nicht ganz optimal. Welchen Sinn hat z. B. die Funktion?

Grüße, Keba.

phreak1n

(Themenstarter)

Anmeldungsdatum:
2. Mai 2009

Beiträge: 16

Danke für die schnelle Hilfe. Das auslesen der Nummer hab ich erst als Funktion erstelle weil ich dank eines denkfehlers dachte ich muss die nummer vor dem kopieren jeder Datei neu auslesen anstatt einfach weiter hochzuzählen. Das muss noch geändert werden.

Allerding bekomme ich die Meldung:

1
./numtest: line 2: (-4): substring expression < 0

hab erst gedacht ich lade es falsch in eine Variable aber wenn ich ein neues Script, nur mit den 2 Zeilen, erstelle bekomme ich den gleichen Fehler.

Trotzdem Herzlichen Dank soweit, in welche Richtung ich nun muss weiß ich ja, ich werde mich erstmal mit dem manipulieren von Strings auseinandersetzten ^^

Danke, calli

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

Wenn ich das richtig sehe, liegt ein Fehler bereits in der Variablenzuweisung:

num=`ls |sort -t '_' -n -k 2 | tail -n 1`

Wenn die Dateien im Stil arch00000001.pdf gehalten sind, dann kann der Feldtrenner schlecht ein Underscore sein. Damit so etwas funktioniert, müsste die Datei arch_00000001_.pdf heißen.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17618

Wohnort: Berlin

1
2
3
4
5
for File in "*.pdf";
do
num=$((i+1));
mv $File "/pub/calli/sortieren/sort/arch"$num".pdf"
done

Die Anführungsstriche sind falsch. Die ersten bringen gar nix, in der Mitte fehlen sie, und am Ende sind sie wieder überflüssig:

1
2
3
4
5
for File in *.pdf
do
    num=$((i+1))
    mv "$File" /pub/calli/sortieren/sort/arch$num.pdf
done

phreak1n

(Themenstarter)

Anmeldungsdatum:
2. Mai 2009

Beiträge: 16

Oha, Danke Leute, da war ja noch so macher Fehler in den paar Zeilen!

Aber es Funtioniert nun, Danke für die Tipps und eure Zeit, calli

Antworten |