Anzeige:
Ergebnis 1 bis 11 von 11

Thema: Dateinamen klein (rekursiv)

  1. #1
    Registrierter Benutzer
    Registriert seit
    19.04.2003
    Beiträge
    194

    Dateinamen klein (rekursiv)

    Hallo Shell-Scripting-Profis!

    Wie kann ich es mittels Shell-Befehlen erreichen, dass ich rekurisv Dateinname klein-geschrieben machen kann. Hatte es früher mit einem C-Prog gemacht, aber das is ziemlich depremierend!

    Müsste doch realisibier sein, oder?

    mfG
    Going to church does not make a person religious, nor does going to school make a person educated, any more than going to a garage makes a person a car.

  2. #2
    Registrierter Benutzer
    Registriert seit
    05.06.2003
    Beiträge
    118
    Kombiniere find mit dem Argument -exec sowie sed mit "\l" für Lowercase.

    AD!

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.04.2003
    Beiträge
    194
    cool, aber jetzt wäre es no nett von dir, wenn du mir den ganzen Befehl aufschreiben würdest! Denn find meckert immer das ein Argument für -exec fehlt, hmm...

    Habs so gemacht: find . * -exec sed '\l'
    Lacht mich bitte net aus, wenn das jetzt vollkommen falsch ist

    mfG
    Going to church does not make a person religious, nor does going to school make a person educated, any more than going to a garage makes a person a car.

  4. #4
    Registrierter Benutzer
    Registriert seit
    05.06.2003
    Beiträge
    118
    Sorry, so einfach wird's dann doch nicht werden. Ich bin mir jetzt auch nichtmal mehr ganz sicher, ob das tatsächlich mit den genannten Tools lösbar wäre, man braucht wahrscheinlich einen Zwischenspeicher, um den Lowercase-Dateinamen zu speichern. Sorry, genauer kann ich dir leider auch nicht helfen.

    AD!

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Beiträge
    222
    aus dem sed manual:
    http://www.delorie.com/gnu/docs/sed/sed_16.html

    Code:
    #! /bin/sh
    # rename files to lower/upper case... 
    #
    # usage: 
    #    move-to-lower * 
    #    move-to-upper * 
    # or
    #    move-to-lower -R .
    #    move-to-upper -R .
    #
    
    help()
    {
    cat << eof
    Usage: $0 [-n] [-r] [-h] files...
    
    -n      do nothing, only see what would be done
    -R      recursive (use find)
    -h      this message
    files   files to remap to lower case
    
    Examples:
           $0 -n *        (see if everything is ok, then...)
           $0 *
    
           $0 -R .
    
    eof
    }
    
    apply_cmd='sh'
    finder='echo "$@" | tr " " "\n"'
    files_only=
    
    while :
    do
        case "$1" in 
            -n) apply_cmd='cat' ;;
            -R) finder='find "$@" -type f';;
            -h) help ; exit 1 ;;
            *) break ;;
        esac
        shift
    done
    
    if [ -z "$1" ]; then
            echo Usage: $0 [-h] [-n] [-r] files...
            exit 1
    fi
    
    LOWER='abcdefghijklmnopqrstuvwxyz'
    UPPER='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    
    case `basename $0` in
            *upper*) TO=$UPPER; FROM=$LOWER ;;
            *)       FROM=$UPPER; TO=$LOWER ;;
    esac
    
    eval $finder | sed -n '
    
    # remove all trailing slashes
    s/\/*$//
    
    # add ./ if there is no path, only a filename
    /\//! s/^/.\//
    
    # save path+filename
    h
    
    # remove path
    s/.*\///
    
    # do conversion only on filename
    y/'$FROM'/'$TO'/
    
    # now line contains original path+file, while
    # hold space contains the new filename
    x
    
    # add converted file name to line, which now contains
    # path/file-name\nconverted-file-name
    G
    
    # check if converted file name is equal to original file name,
    # if it is, do not print nothing
    /^.*\/\(.*\)\n\1/b
    
    # now, transform path/fromfile\n, into
    # mv path/fromfile path/tofile and print it
    s/^\(.*\/\)\(.*\)\n\(.*\)$/mv \1\2 \1\3/p
    
    ' | $apply_cmd
    gruß
    Arthur
    ---------
    irc.mrunix.de #mrunix

  6. #6
    Registrierter Benutzer
    Registriert seit
    19.04.2003
    Beiträge
    194
    DANKE !!!!

    mfG
    Going to church does not make a person religious, nor does going to school make a person educated, any more than going to a garage makes a person a car.

  7. #7
    Registrierter Benutzer
    Registriert seit
    28.02.2004
    Ort
    Faro
    Beiträge
    24

    Question

    wolltest du die filelist nur anzeigen
    Code:
    find -f|sed s#[A-Z]#[a-z]#g
    lassen, oder alle umbenennen?

    gruss, sd.
    I'm not paranoid: It's just that everybody is out to get me. (c) by Linus Torvalds (/usr/src/linux/kernel/exit.c )
    es gibt nur zwei arten von menschen: die einen die glauben, dass es zwei arten von menschen gibt; und diejenigen, die es nicht glauben.
    linux counter: #223744 - it's NEVER 2 late. only NEVER is to late! - echo halb | rev >> www.sinnlos.de
    - my $sig; -

  8. #8
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Darf ich mal nachlegen? Das muß man doch auch mit dem tr Kommando machen können. Nur ich bin zu doof das entsprechend anzuwenden tr unter Linux hat nämlich die Optionen [:upper:] und [:lower:]

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  9. #9
    Registrierter Benutzer
    Registriert seit
    28.02.2004
    Ort
    Faro
    Beiträge
    24
    Code:
    echo "tEsT"  | tr [:upper:] [:lower:]
    geht auch. kannst auch mit regex realisieren, aber die frage ist
    "sollen die nur anzeigt oder umbenannt werden?"

    gruss, sd
    I'm not paranoid: It's just that everybody is out to get me. (c) by Linus Torvalds (/usr/src/linux/kernel/exit.c )
    es gibt nur zwei arten von menschen: die einen die glauben, dass es zwei arten von menschen gibt; und diejenigen, die es nicht glauben.
    linux counter: #223744 - it's NEVER 2 late. only NEVER is to late! - echo halb | rev >> www.sinnlos.de
    - my $sig; -

  10. #10
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Aua, da habe ich vor lauter Bäumen den Wald nicht gesehen

    damit könnte man das Script doch wie folgt gestalten:
    Code:
    find . -exec machwas {} \;
    eventuell noch ein paar Parameter. Und das Script machwas sieht dann so aus
    Code:
    ALTEDATEI=$1
    NEUEDATEI=$(echo $1|tr [:upper:] [:lower:])
    
    if [ -f $NEUEDATEI ]; then
      exit 0  #Datei existiert bereits, keine Änderung
    fi
    
    #
    #
    # Hier können noch jede Menge Abgrenzungen rein
    #
    #
    
    mv $NEUEDATEI $ALTEDATEI
    Mir ging es eigentlich hier nur darum zu zeigen, dass man das ganze auch ohne Perl / Python / was weiß ich in den Griff bekommt. Mit awk hätte man wahrscheinlich auch noch was reissen können. Es führen schließlich viele Wege nach Rom

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  11. #11
    Registrierter Benutzer
    Registriert seit
    19.04.2003
    Beiträge
    194
    Hallo!
    Also ja er sollte die Dateinnamen auch gleich umbennen! Aber das sed-Tutorial hat das eh schon erledigt!

    Naja, wenn ich mir das so anschaue, scheint das ganze auf den ersten Blick ziemlich kompliziert zu sein zu programmieren, mit den Verknüpfungen etc......

    mfG
    Going to church does not make a person religious, nor does going to school make a person educated, any more than going to a garage makes a person a car.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •