[gelöst] Verzeichnisse mit Unterver. umbennen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

[gelöst] Verzeichnisse mit Unterver. umbennen

Beitrag von Duff » 17.09.2009 20:56:23

Hallo,

traue mich schon fast gar nicht zu fragen, aber ich komme im Moment nicht weiter.
Ich habe sehr viele Verzeichnisse und Unterverzeichnisse. Da diese Dateien und Verzeichnisse wohl unter Windows erstellt worden sind, enthalten die Verzeichnisse und Dateien Leerzeichen, Umlaute und was es sonst noch so gibt.

Wollte nun in einem Rutsch erstmal die Leerzeichen aus allen Verzeichnissen in ein _ umwandeln.

Code: Alles auswählen

find . -type d -exec rename 's/\s+/_/g' {} \;
Aber leider findet find nicht alle Verzeichnisse oder kann sie nicht lesen. So zumindestens die Fehlermeldung von find.
Hatte schon überlegt, alles einzelnen über eine for-Schleife abzuarbeiten, aber habe Probleme bei Namen mit Leerzeichen, da diese dann aufgesplittet werden.

Stehe irgendwie gerade auf dem Schlauch ....

Danke & Gruß
Zuletzt geändert von Duff am 24.09.2009 13:29:24, insgesamt 1-mal geändert.
Oh, yeah!

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Verzeichnisse mit Unterver. umbennen

Beitrag von pinguino » 18.09.2009 09:36:52

Das sollte helfen. Vorher aber in einem test-Ordner prüfen. Bei mir funktioniert es.

Code: Alles auswählen

#!/bin/bash

echo ""

read -p "1.Pfad angeben, wo gesucht werden soll." var2

echo ""

read -p "2.ACHTUNG !!! Alle Leerzeichen werden mit \"_\" ersetzt. ¿ Möchten Sie fortfahren (j/n)? " var4

if [[ "$var4" == [n] ]] 

  then

  exit

fi

IFS='
'
for var1 in `find "$var2" -type f`

do

text=${var1##*/} 

var5="/"

var3=` echo "$text" | tr '[:blank:]' '_'` 

  if [[ "$text" != "$var3" ]]

   then

   mv "$var1" ${var1%/*}${var5}$var3 # ${var1%/*} 

   echo ""

   echo "Die Datei \"$text\" wurde durch \"$var3\" ersetzt."

   echo "Die Datei \"$text\" wurde durch \"$var3\" ersetzt." >> /home/$USER/ersetzte_dateien

   else

   continue

  fi

done
Gruß

Pinguino

>>Nota bene<<

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Verzeichnisse mit Unterver. umbennen

Beitrag von Duff » 18.09.2009 10:27:24

Schonmal danke.

Was bedeuten denn ${var1##*/} und ${var1%/*}?
Oh, yeah!

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Verzeichnisse mit Unterver. umbennen

Beitrag von pinguino » 18.09.2009 10:35:54

Duff hat geschrieben:Schonmal danke.

Was bedeuten denn ${var1##*/}
Das heisst, "berücksichtige nur alles was rechts vom letzten Slash"

und
Duff hat geschrieben:${var1%/*}?
"berücksichtige alles was links vom letzten Slash"
Gruß

Pinguino

>>Nota bene<<

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Verzeichnisse mit Unterver. umbennen

Beitrag von Duff » 18.09.2009 10:59:23

Ok, danke.

Dies kannte ich noch nicht. Ist bestimmt nur für die bash?

Mein Problem war die for-Schleife. Hatte dort nicht an das Umstellen von IFS gedacht.
Oh, yeah!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Verzeichnisse mit Unterver. umbennen

Beitrag von Duff » 18.09.2009 11:11:39

Mir ist aufgefallen, dass ich keine Dateien (vorerst), sondern Verzeichnisse umbennen möchte.

Wenn ich dann mehrere Unterverzeichnisse habe, und das oberste Verzeichnis umbenannt wird, so wird er die restlichen Verzeichnisse nicht mehr umbennen können, da ich sich der Name des ersten Verzeichnisses geändert hat. Oder?

Code: Alles auswählen

dir1 blank
  dir2 blank
     dir3 blank
       dir4 blank
  dir2.1 blank
    dir3 blank
Oh, yeah!

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Verzeichnisse mit Unterver. umbennen

Beitrag von pinguino » 18.09.2009 18:25:42

Nein. das sollte nicht passieren. Alle Unterverzeichnisse können nur umbennant werden, in dem du im "find-Befehl" statt

Code: Alles auswählen

-type f

Code: Alles auswählen

-type d
angibst.
Gruß

Pinguino

>>Nota bene<<

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Verzeichnisse mit Unterver. umbennen

Beitrag von Duff » 19.09.2009 17:52:30

Sorry, ja ich hatte die Option -d gemeint.
Oh, yeah!

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Verzeichnisse mit Unterver. umbennen

Beitrag von pinguino » 19.09.2009 18:15:53

wenn du als Pfad:

Code: Alles auswählen

/home/user/meinverzeichnis
angibst, dann wird "meinverzeichnis" nicht umbenannt aber die darunterliegende Verzeichnisse schon.
Gruß

Pinguino

>>Nota bene<<

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Verzeichnisse mit Unterver. umbennen

Beitrag von Duff » 19.09.2009 19:32:56

Ok, dann muss ich das ganze Skript mal ausprobieren.
Hatte bisher als Verzeichnisnamen einen "." angegeben.
Oh, yeah!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Verzeichnisse mit Unterver. umbennen

Beitrag von Duff » 24.09.2009 13:28:58

Bei den Verzeichnisnamen kann man das Skript so leider nicht verwenden.
Habe es dahingehend anpassen müssen, dass die Liste (find-Befehl) neu geladen werden muss, wenn er in die if-Schleife springt.

Muss noch ein paar kleine Korrekturen am Skript vornehmen und könnte es dann posten.

Nochmals Danke für die Hilfestellung (speziell das Setzen von IFS).
Oh, yeah!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: [gelöst] Verzeichnisse mit Unterver. umbennen

Beitrag von Duff » 30.09.2009 19:52:46

Da ich mehrere Tausend Dateien bearbeiten muss (ca. 300 GB Daten), wäre es schön, wenn ich vielleicht irgendwie das bash-Skript parallel ausführen könnte. Oder vielleicht auf die einzelnen Threads verteilen könnte.

Ist sowas möglich?
(Ohne das Skript nun mehrmals zu Starten)
Oh, yeah!

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: [gelöst] Verzeichnisse mit Unterver. umbennen

Beitrag von pinguino » 01.10.2009 09:02:42

verstehe ich das richtig? Du kannst unter Linux (Arbeitsflächen) Scripts /Jobs parallel laufen lassen.
Also tty1, tty2, tty3 ...
Gruß

Pinguino

>>Nota bene<<

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: [gelöst] Verzeichnisse mit Unterver. umbennen

Beitrag von Duff » 01.10.2009 10:55:46

Ich könnte das Skript mehrmals mit unterschiedlichen Pfadaufrufen starten.
Ist aber eigentlich nicht das, was ich will.
Oh, yeah!

Antworten