Hallo,
wer hat eine elegante Lösung für die bash für folgende Aufgabe der Behandlung eines Dateinamens:
1. Prüfe, ob der Dateiname das Muster "123" enthält.
2. Wenn ja, Abbruch. Wenn nein, füge vor dem letzten Vorkommen eines "." im Dateinamen ".123" ein.
3. Enthält der Dateiname kein ".", hänge ".123" an den Dateinamen an.
Würde mich freuen, wenn jemand ne Lösung parat hätte!
Shell: Einfügen von Zeichen in einem Dateinamen
- C_A
- Beiträge: 1082
- Registriert: 22.04.2004 14:51:01
- Lizenz eigener Beiträge: GNU General Public License
Ich hab jetzt soweit ein kleines script gebastelt, nur bei:
Soll das zB so aussehen?
textfile.txt -> textfile.123.txt
sehr.tolles.file -> sehr.tolles.123.file
sehr.sehr.tolles.file -> sehr.sehr.tolles.123.file
Wenn es nur so was wie in der ersten Zeile wäre, hätt ich das
Bin ich mir nicht ganz sicher ob ich dich soweit richtig verstanden habe.Wenn nein, füge vor dem letzten Vorkommen eines "." im Dateinamen ".123" ein.
Soll das zB so aussehen?
textfile.txt -> textfile.123.txt
sehr.tolles.file -> sehr.tolles.123.file
sehr.sehr.tolles.file -> sehr.sehr.tolles.123.file
Wenn es nur so was wie in der ersten Zeile wäre, hätt ich das
Habe nun doch ein Pythonskript gebastelt, was den Zweck erfüllt, mit noch ein paar Extras. Ich möchte es benützen, um die Namen mit aMule fertig heruntergeladener Dateien mit deren eD2k-Prüfsumme zu versehen, damit man später leicht überprüfen kann, ob die Datei noch "original" ist (die ersten 14 Stellen der Prüfsumme reichen mir dafür aus).
Trotzdem wäre ich interessiert, wie ihr das lösen würdet. Mit was programmiert ihr so?
Trotzdem wäre ich interessiert, wie ihr das lösen würdet. Mit was programmiert ihr so?
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
# ed2kettiere
# Version: 15.12.2005
# Fügt "ED2K-" plus die ersten 14 Ziffern des ED2K-Hashes plus "."
# vor dem letzten "." im Dateinamen ein (wenn kein "." im Dateinamen,
# wird o.g. angehängt)
# Parameter:
# was soll vor dem eigentlichen Hash stehen?
hash_prefix=".ED2K-"
# auf wieviel Stellen soll der Hash gekürzt werden?
hash_laenge=14
# für Befehlszeilenparameter:
import sys
# für Shell-Kommando:
import os
befehlsargumente=sys.argv
progname=os.path.basename(befehlsargumente[0])
# genau zwei Parameter übergeben?
if len(befehlsargumente) !=3:
print
print progname+" - Skript zum ED2Kettieren"
print
print "Syntax: "+progname+" <Dateiname> <Hash>"
print
sys.exit(1)
# der komplette Dateipfad:
pfad=befehlsargumente[1]
# nur der Ordnerpfad:
ordner=os.path.dirname(pfad)
# nur der Dateiname:
datei=os.path.basename(pfad)
# der Hashwert:
hash=befehlsargumente[2]
# Der Hash wird auf die ersten <haesh_laenge> Stellen gekürzt:
hash_gekuerzt=hash[:hash_laenge]
# Der komplette Hash-Anhang:
hash_anhang=hash_prefix+hash_gekuerzt
# Ist der gekürzte Hash bereits im Dateinamen enthalten?
if datei.find(hash_gekuerzt) != -1:
print "Die Datei \""+pfad+"\" enthält die (Teil-)Prüfsumme \""+hash_gekuerzt+"\" bereits."
sys.exit(1)
# Position des letzten Punktes im Dateinamen:
letzter_punkt=datei.rfind(".")
# gar kein Punkt im Dateinamen?
if letzter_punkt == -1:
# dann Hash hinten ranhängen
pfad_neu=pfad+hash_anhang
else:
# oder Hash in Dateinamen einfügen
datei_neu=list(datei)
datei_neu.insert(letzter_punkt,hash_anhang)
datei_neu="".join(datei_neu)
# ordner endet nicht mit /, daher:
pfad_neu=os.path.join(ordner,datei_neu)
print "Alter Dateiname: ",pfad
print "Neuer Dateiname: ",pfad_neu
os.rename(pfad,pfad_neu)