ubuntuusers.de

Für diese Funktion musst du eingeloggt sein.

Befehl für bestimmte nummerierte Dateien ausführen

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

jannes

Avatar von jannes

Anmeldungsdatum:
11. Januar 2007

Beiträge: 77

Hallo,
ich habe einen Ordner, der solche Dateien enthält:
page-001.jpg
page-002.jpg
page-003.jpg
...
page-150.jpg

Ich möchte jetzt einen bestimmten Befehl nur für die Dateien mit einer Nummer zwischen 001 und 129 ausführen.
Ich wollte das eigentlich mit find erledigen, aber das scheint nicht zu gehen, weil find anscheinend keine richtigen Regulären Ausdrücke unterstützt (Grouping hat bei mir nicht funktioniert).

Ich könnte jetzt natürlich in 5 Minuten ein Skript mit Python schreiben, aber sowas müss ja eigentlich mit der Bash schneller gehen (wenn man weiß wie es geht 😉)

Meine Ideen wären jetzt:
- es geht doch irgendwie mit find, aber ich hab irgendwas vergessen
- es gibt irgendeinen anderen coolen Befehl dafür
- man könnte die Zahl aus dem Dateinamen extrahieren und dann mit einer if-Abfrage die Zahl vergleichen, allerdings kenne ich mich mit der Syntax der Bash-Kontrollstrukturen überhaupt nicht aus

Könnt ihr mir sagen, wie ich das am besten hinkriegen kann?

Ghaldez

Avatar von Ghaldez

Anmeldungsdatum:
14. April 2007

Beiträge: 796

Hm ich wuerde einfach in das verzeichnis gehen und

for i in `seq 1 129` do ; mv page-$1.jpg   moep-$1.jpg

(oder was du auch machen willst)

ich gebe keinerlei garantie 😉

koennte problematisch werden mit dem 001 und dem i das ja nur 1 ist hmm *weiterdenk*

jannes

(Themenstarter)
Avatar von jannes

Anmeldungsdatum:
11. Januar 2007

Beiträge: 77

Hey,
Danke für die Hilfe 😀 Ich hab dann einfach in der man page von seq nachgeschaut, obs die Zahlen auch mit führenden Nullen gibt und tatsächlich gibts dafür einen Parameter.
Ich hab dann noch die zwei Schreibfehler in deiner For-Schleife gefunden und jetzt hab ich folgenden Befehl:

for i in $(seq -w 1 129); do (echo page-$i.jpg); done

Mich würde ja eigentlich mal interessieren, ob man das auch ohne For-Schleife mit find & co. hinkriegen kann.

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

*anstups*
printf kann das.

€dit:
zu langsam...

€dit²:
Dann hier ohne Schleife:

find . | perl -ne '/page-(\d+)/ && $1 <= 129 && print $_'
Antworten |