Hallo Ich möchte unter Linux in einem Verzeichnis gleichnamige Ordner, die sich nur durch Groß- bzw. Kleinschreibung unterscheiden, umbenennen lassen. Beispiel: ordner ORDNER Ordner Nach dem umbenennen: ordner ORDNER_001 (oder ähnlich) Ordner_002 (oder ähnlich) Das ganze dazu, damit unter Windows die Ordner korrekt angesprochen werden können. Kann hier jemand helfen?
Kann man nicht Windows irgendwie beibringen, case-sensitive zu arbeiten? z.B. so: https://www.howtogeek.com/354220/how-to-enable-case-sensitive-folders-on-windows-10/
Dazu müsstest du jedes Verzeichnis gegen jedes Verzeichnis vergleichen und zählen, am besten schreibst du erstmal alles in eine Indexdatei. Das ist zwar mit einem shell script schnell gemacht, wie lange das dann läuft hängt aber von deinen Daten ab. Mir ist allerdings unverständlich wieso man seine Verzeichnisse überhaupt so benennt. Wenn das generierte Verzeichnisse sind, dann wäre es besser das an der Quelle zu korrigieren, statt hinterher aufzuräumen.
:
Bearbeitet durch User
Wie wäre es, wenn Du von hausaus jedem Ordner eine fortlaufende Nummer in Form eines Suffix anhängst _001, _002 etc. Der Filemanager unter Win hätte dann die Unterscheidung, die er benötigt. Markus
cp und mv können von Hause aus "Backups" anlegen, wenn das Ziel bereits existiert. Eine Umbenennung könnte also so ähnlich geschehen:
1 | for F in ./blabla/* ; do NFILE=$(echo $F | tr "[A-Z]" "[a-z]") ; mv --backup=numbered $F $NFILE ; done |
man mv ; man cp (s.a. "--suffix") man rename ; man mmv
1 | #!/bin/bash
|
2 | |
3 | #cd ./test
|
4 | |
5 | knownDirs=( _foo ) |
6 | |
7 | for d in * |
8 | do
|
9 | if [[ -d "$d" ]]; then |
10 | lowerCase="${d@L}" # in lowercase umwandeln |
11 | echo "lowercase: $lowerCase" |
12 | |
13 | if [[ "${knownDirs[@]}" =~ "$lowerCase" ]] |
14 | then
|
15 | knownDirs+=("$lowerCase") |
16 | # neue namen generieren
|
17 | # prefix solange genieren bis eines rauskommt das noch nicht exisitert
|
18 | new_name="$lowerCase"__$(($RANDOM % 10)) |
19 | while [[ -d "$new_name" ]] |
20 | do
|
21 | new_name="$lowerCase"__$(($RANDOM % 10)) |
22 | done
|
23 | mv "$d" "$new_name" |
24 | echo "$d -> $new_name" |
25 | |
26 | else
|
27 | knownDirs+=("$lowerCase") |
28 | fi
|
29 | fi # check auf dir |
30 | done
|
Sönke P. schrieb: > Eine Umbenennung könnte also so ähnlich geschehen:for F in ./blabla/* ; > do NFILE=$(echo $F | tr "[A-Z]" "[a-z]") ; mv --backup=numbered $F > $NFILE ; done Das benennt alles um, auch Dateien wenn welche vorhanden sind. Es sollen nur dirs umbenannt werden, das Gemurkse mit echo pipe nach tr braucht heute auch keiner mehr, @L existiert.
Wenn dann bitte richtig (Leerzeichen!) und auch gleich Zeichensatz konvertieren den Windows auch erlaubt.
1 | 's/[^][A-Za-z0-9 !#$%&'$'\047''()+,.\/;=@'$'\136''_\`{}~'$'\177''-]/_/g' |
https://dwheeler.com/essays/filenames-in-shell.html#wrong
Herbert B. schrieb: > Sönke P. schrieb: >> Eine Umbenennung könnte also so ähnlich geschehen:for F in ./blabla/* ; >> do NFILE=$(echo $F | tr "[A-Z]" "[a-z]") ; mv --backup=numbered $F >> $NFILE ; done > Das benennt alles um, auch Dateien wenn welche vorhanden sind. > Es sollen nur dirs umbenannt werden, das Gemurkse mit echo pipe nach tr > braucht heute auch keiner mehr, @L existiert. Das was Sönke da schrieb erscheint mir 1000 mal eleganter als dein Machwerk. Kleiner Tipp: Wenn man die Tools die man nutzt kennt, erkennt man auch relativ schnell wie Filter auf Verzeichnisse (-type d) setzt. Eine Begrenzung auf eine Verzeichnisebene ist ggf auch noch sinnvoll.
Herbert B. schrieb: > Das benennt alles um, auch Dateien wenn welche vorhanden sind. Dann ist ja gut, dass dein Script nicht nur exemplarisch, sondern universell ist (hust "_foo"). > Es sollen nur dirs umbenannt werden, das Gemurkse mit echo pipe nach tr > braucht heute auch keiner mehr, @L existiert. Dieser Bash-Trick mit ${VARIABLE@L}/${VARUABLE@U} ist ja fein. Aber wenn der TO nichtmal einfache Shellbefehle beherrscht, dann zeigt man ihm m.E. lieber erstmal "Gemurkse" mit Pipes und Standardutilities.
Hubert Kaiser schrieb: > Ich möchte unter Linux in einem Verzeichnis gleichnamige Ordner, die > sich nur durch Groß- bzw. Kleinschreibung unterscheiden, umbenennen > lassen. Beispiel: > [...] > Das ganze dazu, damit unter Windows die Ordner korrekt angesprochen > werden können. Kann hier jemand helfen? Anbei ein schneller Hack in Python, der rekursiv über Unterverzeichnisse geht und auch Dateien umbenennen kann. Alle verwendeten Module sind in jeder Python-Standardinstallation vorhanden. YMMV, HTH.
Euch muss ja unendlich langweilig sein, dass ihr immer noch auf den Troll reagiert...
Sönke P. schrieb: > Herbert B. schrieb: >> Das benennt alles um, auch Dateien wenn welche vorhanden sind. > > Dann ist ja gut, dass dein Script nicht nur exemplarisch, sondern > universell ist (hust "_foo"). _foo hat überhaupt keine Auswirkungen, kannst auch Sönke eintragen oder gar nix, das ändert überhaupt nichts an dem Script. Wenn du Ahnung hättest würdest du dich nicht an diesem Punkt aufhängen. Es enthält noch einen potentiellen Fehler, der ist dir Experte aber nicht mal aufgefallen. > Dieser Bash-Trick mit ${VARIABLE@L}/${VARUABLE@U} ist ja fein. Ist kein Trick, das ist ein Feature das man nutzt. > Aber wenn der TO nichtmal einfache Shellbefehle beherrscht, > dann zeigt man ihm > m.E. lieber erstmal "Gemurkse" mit Pipes und Standardutilities. Wasn das fürn lächerliches Ausredenargument? Dein Gepipe ist schlicht überflüssig, elegant ist wenn man ohne dieses auskommt, warum wirst du vermutlich nicht verstehen.
Herbert B. schrieb: > das ist ein Feature das man nutzt. > > Dein Gepipe ist schlicht > überflüssig, elegant ist wenn man ohne dieses auskommt, Pipes sind ein Standardfeature vieler Shells, warum sollte man die nicht benutzen? @L hingegen ist ein Bashism... hm.
Es gibt 99 verschiedene Möglichkeiten das zu lösen, kommt mal runter.
Hubert Kaiser schrieb: > Hallo > > Ich möchte unter Linux in einem Verzeichnis gleichnamige Ordner, die > sich nur durch Groß- bzw. Kleinschreibung unterscheiden, umbenennen > lassen. Beispiel: > > ordner > ORDNER > Ordner > > Nach dem umbenennen: > > ordner > ORDNER_001 (oder ähnlich) > Ordner_002 (oder ähnlich) Gemischte Groß- und Kleinschreibung ist immer noch schlampig! Warum nicht einfach: ordner_000 ordner_001 ordner_002 und grundsätzlich alles klein.
DPA schrieb: > Kann man nicht Windows irgendwie beibringen, case-sensitive zu > arbeiten? Das ist auch ne Murkslösung, weil er dann jedes Windows umkonfigurieren muss, in dem er die Verzeichnisstruktur nur nutzen will.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.