Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Bash - Verzeichnisse umbenennen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.10.2003, 14:33 Uhr
~Kevin
Gast


Hallo,

ich beschäftige mich nun seit einer Weile begeistert mit der bash. Nun wollte ich mal ein kleines sinnvolles Programm schreiben. Ich habe nämlich folgendes Problem. Ich habe in einem Verzeichnis sehr viele Verzeichnisse und Dateien, die irgendwelche Namen haben. Und nun möchte ich alle Verzeichnisse (nur Verzeichnisse und nichts anderes) in die Zahlen 1, 2, 3, 4, ... umbenennen.
Ich mache mal ein Beispiel.

asdf1
jköö
jköjkö
asjk

Nehmen wir an, dass dies 4 verschiedene Verzeichnisse sind. Das Ergebnis sollte dann lauten:

1
2
3
4

Falls Dateien dabeigewesen wären, sollten diese einfach nicht beachtet werden. Es ist bei mir auch der Fall, dass die Verzeichnisse keine weiteren Verzeichnisse enthalten, sondern nur eine Menge von Dateien.

Ich habe nun folgendes probiert. Aber es funktioniert nicht.


Code:
#! /bin/sh
# Benennt Verzeichnisse in Zahlen (1,2,3,...) um.

a = 0
for i in test -d *
do
a = $[$a+1]
mv $i $a
done



Was mache ich bloß falsch?

Vielen Dank für eure Hilfe

Kevin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.10.2003, 19:40 Uhr
virtual
Sexiest Bit alive
(Operator)


Keine Leerzeichen um das "=" Zeichen herum verwenden! Das ist schon mal das erste Problem.
Naja un dann das

Code:
for i in test -d *


Heisst übersetzt: Führe die Schleife aus, wobei i nacheinander die Werte "test", "-d" sowie die namen der Dateien/Verzeichnisse im Aktuellen Verzeichnis annehmen soll.
Ich denke, du willst eigentlich das hier:

Code:
a=0
for in in *
do
      if [ -d $i ]
      then
          a=$[$a+1]
          my $i $a
      fi
done


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.10.2003, 20:14 Uhr
~Kevin
Gast


Hi,

vielen Dank. So funktioniert es. Aber nun habe ich noch ein Problem dabei entdeckt. Wenn ein Verzeichnis zufällig schon so heisst, wie es umbenannt werden soll, dann geht es nicht.
Das werde ich jetzt aber selbst probieren zu lösen. Wird wahrscheinlich nicht so schwer sein.

Die bash gefällt mir wirklich sehr gut. Man muss halt recht genau auf die Syntax achten, habe ich nun festgestellt. Hier ist wirklich jedes Leerzeichen von Bedeutung.
Aber das macht nichts. Daran werde ich mich schon gewöhnen.

Was mich noch wundert ist, dass der * aus der for-Schleife nur Dateien aus dem aktuellen Verzeichnis berücksichtigt. Ich dachte, dass er auch Unterverzeichnisse mitberücksichtigen würde. Für mein Programm ist das zwar gut so, dass die Unterverzeichnisse gar nicht berücksichtigt werden. Interessieren würde es mich aber doch, ob der * nur für das aktuelle Verzeichnis gilt, oder für alle Unterverzeichnisse, denn eigentlich bin ich mir ziemlich sicher, dass ich gelesen hatte, dass alles miteinbezogen wird, d.h. dass der * expandiert.

mfg

Kevin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.10.2003, 20:35 Uhr
~Kevin
Gast


Hi,

das ist nun meine Lösung, die berücksichtigt, ob ein Verzeichnis schon den gleichen Namen hat, wie der Namen, in welches es umbenannt werden soll.

Schreibt mir bitte, ob man es geschickter als so formulieren könnte.


Code:
#! /bin/sh
# Benennt Verzeichnisse in Zahlen (1,2,3,...) um.
zahl=0
for i in *
do
    if [ -d $i ]
    then
        zahl=$[$zahl+1]
        if [ $zahl -ne $i ]
        then
            mv $i $zahl
        fi
    fi
done




Und dann hätte ich noch eine Frage. Um das mit den Unterverzeichnissen besser zu verstehen, wäre es interessant für mich diese mit einzubeziehen.
Ich meine folgendes:

asdf: jköjkö jköjkökö asdfsdf
kklll: kljljöj asdfasdf sdkflajsöd

Hier habe ich nun 2 Verzeichnisse. In der aktuellen Version meines Programms würde nun folgendes rauskommen:

1: jköjkö jköjkökö asdfsdf
2: kljljöj asdfasdf sdkflajsöd

Die Unterverzeichnisse bleiben also total unberücksichtigt. Jetzt würde ich gerne mein Programm so erweitern, dass es folgendes als Ergebnis bringt:

1: 2 3 4
5: 6 7 8

Die Unterverzeichnisse sollen also auch mit umbenannt werden. Jetzt würde es mich noch dabei interessieren, wie ich einstellen könnte, bis zu welcher Tiefe diese mitberücksichtigt werden sollen. Am liebsten wäre es mir, dies mit einem Parameter zu realisieren. Wenn das Programm rendir heisst, dann sollte
"./rendir 2" bedeuten, dass Unterverzeichnisse bis Tiefe 2 berücksichtigt werden bei der Umbenennung.

Ich möchte, die Aufgabe natürlich größtenteils selbst lösen, denn ich will ja etwas dabei lernen. Aber ich brauche einen Anstoss wie ich diese Unterverzeichnisse mitberücksichtigen kann und wie ich die Tiefe mitberücksichtigen kann.

Ein paar Tips wären wirklich toll für mich. Denn mir macht es gerade richtig Spass die bash kennenzulernen und damit rumzuspielen.

Vielen Dank im Voraus

Kevin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.10.2003, 21:31 Uhr
~Kevin
Gast


Hi,

hab grad ein Fehler in meinem Code vom vorletzten Posting entdeckt. Es werden 2 Zeichenketten und nicht 2 Integer miteinander verglichen. Deshalb muss dort nicht -ne sondern != stehen.

mfg

Kevin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.10.2003, 23:16 Uhr
virtual
Sexiest Bit alive
(Operator)


Probier mal sowas wie

Code:
find . -type d -depth | while read i
do
     echo $i
done


Das gibt dir die Verzeichnisse und Unterverzeichnisse aus. Was Du dann in die while Schleife Reintust, sei dir überlassen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: