Ordner umbennenen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Peregrine, 11.09.2006.

  1. #1 Peregrine, 11.09.2006
    Peregrine

    Peregrine Honorarkonsul

    Dabei seit:
    03.08.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Ort:
    München, Bayern, Germany
    Huhu!
    :oldman Frage: ich möchte in einem Verzeichnis enhaltene Daten umbenamsen. Der Verzeichnisinhalt sieht z.B. wie folgt aus

    Code:
    drwxr-xr-x+ 11 augustm1        mkgroup-l-d 0 Sep 11 13:03 .
    drwxrwx---+ 28 Administratoren SYSTEM      0 Sep 11 13:02 ..
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 1157972308
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 1157972309
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 1157972310
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 1157972311
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 1157972312
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 1157972313
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 1157972314
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 1157972315
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 1157972316
    Ich möchte nun vor die Verzeichnisnamen Prefixe schreiben, damit die Ordnernamen danach so aussehen.

    Code:
    drwxr-xr-x+ 11 augustm1        mkgroup-l-d 0 Sep 11 13:03 .
    drwxrwx---+ 28 Administratoren SYSTEM      0 Sep 11 13:02 ..
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 pre_1157972308
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 pre_1157972309
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 pre_1157972310
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 pre_1157972311
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 pre_1157972312
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 pre_1157972313
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 pre_1157972314
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 pre_1157972315
    drwxr-xr-x+  2 augustm1        mkgroup-l-d 0 Sep 11 13:02 pre_1157972316
    Bisher sieht mein Code so aus

    Code:
    find . -type d -name '*' -type d | xargs -i mv {} 'pre{}'
    
    Logischerweise gibt es nun folgende Fehlermeldung

    Code:
    mv: cannot move `./1157972308' to `x./1157972308': No such file or directory
    [...]
    Wie bewerkstellige ich es, dass ich das "./" loswerde? Wie kann ich die Filenamen extrahieren? Muss ich da vorher noch durch einen anderen CMD pipen?
     
  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 supersucker, 11.09.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    man basename........:)
     
  4. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Damit kommt find logischerweise nicht klar. Besser wäre eine Umleitung in eine Variable:

    Code:
    find ... | while read i; do mv "$i" "pre_$i"; done
    Gruss, Xanti
     
  5. #4 Wolfgang, 11.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Das wird nicht funktionieren, wenn in $i der von find vorangestellte Pfad enthalten ist.
    Wenn find /home/user/verzeichnisname liefert, dann wird daraus pre_/home/user/verzeichnisname
    Also einfach Variablenexpansion der Bash/Ksh oder basename (wie bereits gesagt wurde) verwenden.
    Mit Varaiblenexpansion wäre das :
    Code:
    find . -type d -maxdepth 1|while read i; do 
    F=pre_${i##.*/};
    P=${i%/.*};
     mv $i ${P}/$F;
      done
    
    Das geht natürlich kompakter, soll aber hier verdeutlichen was passiert.

    Gruß Wolfgang
     
  6. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Doh, stimmt. Heute wieder zu heiss hier. ;)
     
  7. #6 Peregrine, 11.09.2006
    Peregrine

    Peregrine Honorarkonsul

    Dabei seit:
    03.08.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Ort:
    München, Bayern, Germany
    Besten Dank an alle - ursprünglich habe ich auch den Befehl "Basename" gesucht und auch versucht das ganze so zu realisieren, aber es klappte nicht wirklich :-)

    Ich hab das ganze nun so gelöst - scheint mir etwas lesbarer.
    @Wolfgang: deine Lösung scheint mir sehr interessant - wenn möglich würde ich mich einen kurzen Kommentar deines Ansatzes bitten; wie funktioniert denn das?! :think:

    Code:
    find . -type d | while read i; 
    do
    if test $i == . -o $i == ..; then
    continue;
    else
     newfile=prefix_$(basename $i);
     mv $i $newfile;
    fi;
    done
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 Wolfgang, 11.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Parameterexpansion ist das Suchwort:
    Hier einen Auszug aus der man bash:
    Ich entferne also vorangestellten Pfad mit ${VAR##.*/}, weil das alles was nach dem letzten Slash folgt zurückgibt. Beliebig viele Zeichen beliebig oft werden dabei mit geschluckt.
    Im Fall des Pfades ist es genau umgekehrt, d.h. ich untersuche den Variableninhalt vom Ende her.

    Gruß Wolfgang
     
  10. #8 Peregrine, 11.09.2006
    Peregrine

    Peregrine Honorarkonsul

    Dabei seit:
    03.08.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Ort:
    München, Bayern, Germany
    *Pling* Heute wieder etwas dazu gelernt :-) Danke Wolfgang!
     
Thema:

Ordner umbennenen

Die Seite wird geladen...

Ordner umbennenen - Ähnliche Themen

  1. Alle Dateien eines Ordners umbennenen

    Alle Dateien eines Ordners umbennenen: Hallo Forum, ich benutze einen Mac, allerdings möchte ich mir ein Shellskript basteln und habe allerdings keine Ahnung wie! Bin absolute neu in...
  2. Wo befindet sich der Autostartordner?

    Wo befindet sich der Autostartordner?: Hallo ich habe CentOS 7.2.15.11 und Desktopumgebung mate , wo befindet sich der Autostartordner?
  3. Ordner für einen User freigeben

    Ordner für einen User freigeben: Hallo, ich möchte mit Samba (auf einem Ubuntu Server) einen Ordner im lokalen Netzwerk freigeben. Dieser Ordner soll auf allen Geräten im...
  4. youtube-dl mit WebUI einrichten - Download-Ordner ändern + Berechtigungen

    youtube-dl mit WebUI einrichten - Download-Ordner ändern + Berechtigungen: Hallo, auf meinem Raspberry Pi habe ich youtube-dl (manuelle Installation; systemweit [wie im UU-Wiki beschrieben]) installiert. Dazu...
  5. Problem mit 1er Freigabe und mehreren Ordnern

    Problem mit 1er Freigabe und mehreren Ordnern: Hallo Ich habe auf unseren home Server das Neuste Debian mit der neusten stabilen Samba Version. Ich habe eine Freigabe die die mehrere Ordner...