Einfaches Shellscript - dateinamen ändern

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von schubidooo, 02.08.2013.

  1. #1 schubidooo, 02.08.2013
    schubidooo

    schubidooo Grünschnabel

    Dabei seit:
    02.08.2013
    Beiträge:
    3
    Zustimmungen:
    1
    Hey, kann mir jemand vielleicht bei diesem miniscript helfen?

    ich habe dateien die folgendermaßen aussehen

    MM-DD-YY-dateiname und
    MM-DD-YYYY-dateiname

    ich möchte es gerne vereinheitlichen zu

    YYYY-MM-DD-dateiname

    zur not auch nacheinander. die YY angaben sind nur im 20xx bereich.
    -----------------

    ein pseudoscript:

    a) speichere alle zeichen zwischen dem zweiten und dritten "-" in $temp
    b) füge "20" + die letzten beiden zeichen von $temp + "-" vorne an den dateinamen an
    c) lösche alle zeichen zwischen dritten und vierten "-"

    nur habe ich leider keine ahnung wie ich ein funktionierendes script baue.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 schubidooo, 02.08.2013
    schubidooo

    schubidooo Grünschnabel

    Dabei seit:
    02.08.2013
    Beiträge:
    3
    Zustimmungen:
    1
    -
     
  4. #3 Spröde, 03.08.2013
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Ohne Gewähr:
    Code:
    #!/bin/bash
    find -maxdepth 1 -type f -name "[0-9][0-9]-[0-9][0-9]-[0-9][0-9]*" | while read Line; do
        Line="${Line#./}"
        IFS='-' Array=($Line)
        [ ${#Array[2]} = 2 ] && Array[2]="20${Array[2]}"
        mv -v "$Line" "${Array[2]}-${Array[0]}-${Array[1]}-${Line#[0-9]*-[0-9]*-[0-9]*-}"
    done
    
     
  5. #4 schubidooo, 03.08.2013
    schubidooo

    schubidooo Grünschnabel

    Dabei seit:
    02.08.2013
    Beiträge:
    3
    Zustimmungen:
    1
    vielen dank! hatte mich inzwischen selbst ein bisschen eingelesen und das hier produziert

    Code:
    for filename in *
    do
    
    neu=$(echo $filename)
    
    ch6=$(echo $filename|cut -c6-6)
    ch9=$(echo $filename|cut -c9-9)
    ch11=$(echo $filename|cut -c11-11)
    
    #TYP A: MM-DD-dateiname -> YYYY-MM-DD-dateiname
    if [ "$ch9" != "-" ] && [ "$ch11" != "-" ] 
    	then 
    	jahr=$(echo 2011)
    	rest=$(echo $filename)
    	neu=$(echo $jahr-$filename)
    fi 
    
    #TYP B: MM-DD-YY-dateiname -> YYYY-MM-DD-dateiname
    if [ "$ch9" = "-" ] 
    	then 
    	jahr=$(echo  $filename|cut -c7-8)
    	rest=$(echo $filename|cut -c1-6,10-)
    	neu=$(echo 20$jahr-$rest)
    fi 
    
    #TYP C: MM-DD-YYYY-dateiname -> YYYY-MM-DD-dateiname
    if [ "$ch11" = "-" ] && [ "$ch6" == "-" ] 
    	then 
    	jahr=$(echo  $filename|cut -c7-10)
    	rest=$(echo $filename|cut -c1-6,12-)
    	neu=$(echo $jahr-$rest)
    fi 
    
    
    mv $filename $neu
    
    
    done
    

    etwas uneleganter und länger als deins^^


    eine frage hätte ich noch: wie kann man .sh scripte unter windows ausführen? ich bin auf cygwin, windows services for unix und MinGW gestoßen. irgendwelche empfehlungen?
     
    olpo gefällt das.
  6. #5 tgruene, 03.08.2013
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    sowohl cygwin als auch mingw stellen die bash bereit. Mir persoenlich gefaellt cygwin besser als mingw.
     
  7. #6 fresh$free, 03.10.2013
    fresh$free

    fresh$free Jungspund

    Dabei seit:
    03.10.2013
    Beiträge:
    22
    Zustimmungen:
    0
    Wenn schon Perl installiert ist (zu 99% der Fall):
    Unter Perl gibt es ein Wrapperscript das (Perls) reguläre Ausdrücke auf Dateinamen anwendet um sie umzubenennen, das Script hat den passenden Namen rename. Man übergibt ihm nur den regulären Ausdruck und den/die Dateiname(n). Es arbeitet nur im jeweiligen Verzeichnis, soll es rekursiv sein, bastelt man ein bashscript das durch die Verz. iteriert.
    Mit Parameter -n kann man testen was es macht ohne dass es die Aktion wirklich durchführt.

    Für Dateien mit MM-DD-YYYY-dateiname:
    rename 's/(\d\d)-(\d\d)-(\d\d\d\d)-(.*)/${3}-${1}-${2}-${4}/' ./*

    Für Dateien mit MM-DD-YY-dateiname:
    rename 's/(\d\d)-(\d\d)-(\d\d)-(.*)/20${3}-${1}-${2}-${4}/' ./*

    Statt mehrfach \d's zu schreiben geht auch \d{4} für 4 \d's
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema: Einfaches Shellscript - dateinamen ändern
Besucher kamen mit folgenden Suchen
  1. linux nur filenamen ändern

    ,
  2. shell dateinamen ändern

    ,
  3. shell scripte dateinamen ändern

Die Seite wird geladen...

Einfaches Shellscript - dateinamen ändern - Ähnliche Themen

  1. Einfaches Problem in Python

    Einfaches Problem in Python: Abend, ich hab ein ganz einfachs Problem in python komm aber einfach nicht auf die lösung. Problema: Aus vielen Pfaden und Variablen baut er...
  2. Einfaches Two-Way-Sync

    Einfaches Two-Way-Sync: Hallo, ich bin auf der Suche nach einer einfachen Lösung um zwei Ordner zu synchronisieren. Der eine Ordner ist lokal auf dem Laptop, der...
  3. Vergleichbar Einfaches wie encfs/fuse ?

    Vergleichbar Einfaches wie encfs/fuse ?: Hallo, seit kurzem (reichlich spaet, aber besser spaet als nie :-)) verschluessele ich meine schuetzenswerten Daten unter Fedora Core 6 mit...
  4. einfaches Backup - ATI Trieber

    einfaches Backup - ATI Trieber: Mein Problem: Bisher ist die Installation eines ATI Treibers immer schief gegangen. Jetzt habe ich mein System soweit konfiguriert, aber die...
  5. Einfaches RS232 Programm

    Einfaches RS232 Programm: Hi ich bräuchte ein programm mit welchem ich einfach nur einen integer auf meinen serielle schnittstelle schreiben und auch lesen kann. Habe...