striche statt spaces

Post Reply
Message
Author
bjoernforce

striche statt spaces

#1 Post by bjoernforce »

guten morgen erst einmal

ich habe hier auf meiner linux-box ein kleines problem. ich bin gerade dabei mich mal etwas intnsiver mit der konsole zu beschaeftigen. geht auch alles soweit. aber ich habe immer probleme mit der autovervollstaendigung, wenn in dem daeinamen luecken sind. er macht dann immer irgendwelche schraegstriche zwischen den woertern. der befehl geht dann aber meistens trotzdem nicht, weil er damit nicht zurecht kommt.

ich suche nun 2 dinge
zum einen eine moeglichkeit eine Datei mit luecken anzugeben ohne das ich mit strichen arbeiten muss. geht das auch irgendwie mit klammern, die man um den gesamten namen der datei setzten kann, oder was aehliches?

das zweite, was ich suche ist ein befehl fuer die konsole mit dem ich alle dateien in einem verzeichnis und alle dateien in dessen unterverzeichnissen von den luecken im namen befreit, die saces also durch unterstriche ersetzt.
waere echt schoen, wenn ihr da ne loesung haettet.

vielen dan schon mal fuer eure antworten!

so long

bjoern

Descartes

Re: striche statt spaces

#2 Post by Descartes »

a) den Datei oder Verzeichnisnamen in Spaces setzen: ls -l "hier kommt Kurt"

b) ein kleines Bash Scripts z.B.

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/bash

# Verzeichnisse umbenennen
for verzeichnis in "$(find . -type d -print)"; do
mv ${verzeichnis} ${verzeichnis/ /_}
done

# Dateien umbenennen
for datei in "$(find . -type f -print)"; do
mv ${datei} ${date/ /_}
done
</font><hr></pre></blockquote>

Wenn du lediglich alle Dateien/Verzeichnisse im aktuellen Verzeichnis umebennen möchtest, dann musst du bei find noch den Parameter "-maxdepth 1" anhängen.

Descartes

Re: striche statt spaces

#3 Post by Descartes »

>
> mv ${datei} ${date/ /_}
>
Schreibfehler.

Muss natürlich "datei" und nicht "date" lauten:

mv ${datei} ${datei/ /_}

Jochen

Re: striche statt spaces

#4 Post by Jochen »

Hi!

Die Autoververvollständigung der bash macht eigentlich schon das Richtige. Beim Dateinamen "datei mit spaces.txt" macht sie aus<pre>ls -l da<TAB></pre>ein <pre>ls -l datei\<!--no--> mit\<!--no--> spaces.txt</pre> Die Backslashes sagen der Shell, dass die Leerzeichen als Zeichen an und für sich (und damit als Bestandteil des Dateinamens) zu betrachten sind. Ansonsten würde die Shell davon ausgehen, das ls 3 Dateien auslisten soll: "datei", "mit" und "spaces.txt". Die existieren natürlich so nicht. Die Backslashes stören also nicht, sondern sorgen dafür, dass die Shell den Dateinamen genau so verwendet, wie er auf der Platte steht. Wenn also hinterher was nicht funktioniert, wird es an etwas anderem gelegen haben!

Wenn Du den Dateinamen in Anführungszeichen ("datei mit spaces.txt") oder Apostrophe ('datei mit spaces.txt') einschliesst, werden die Backslashes nicht mit eingefügt und sind auch nicht notwendig, da die Anführungszeichen der Shell sagen, dass alles innerhalb der Zeichen als eine zusammengehörige Zeichenkette zu betrachten ist. Das ist sozusagen die "Klammerung", von der Du oben gesprochen hast.

Und wenn Du jetzt immer noch in einem ganzen Verzeichnisbaum bei allen Dateinamen Leerzeichen durch Unterstriche ersetzen willst, musst Du noch etwas Geduld haben. Das poste ich nämlich etwas später, weil ich jetzt keine Zeit mehr habe (oder jemand anderes!).

Jochen

Post Reply