Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

19.01.2007, 14:58

[gelöst] Bash Script für mv

Hallo,

ich hoffe das hier jemand ist der sich gut mit Scripten auskennt.

ich möchte rekursiv Datein umbenenen und Verzeichnisse.

Dabei soll immer das 2te Zeichen egal was es ist durch oe erstzt werden auch bei den Verzeichnissnamen.

Das erste Zeichen ist immer ein großes B.

Vielen Dank

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Planeshift« (19.01.2007, 22:13)


2

19.01.2007, 15:34

Da fällt mir auf die Schnelle erstmal das Paket "app-misc/mved" ein.
Die Funktion ist denkbar einfach.

Dateien die man verschieben möchte erstmal auswählen.

Quellcode

1
mved datei1 datei2 *.pdf test/*
Dann öffnet vim mit einer Liste der ausgewählten Dateien, die man da (Vim-Kenntnisse vorrausgesetzt) ganz easy umbenennen kann.

Sollte der Vim nicht deinem Geschmack entsprechen und du kennst einen anderen Editor, mit dem man mal eben auf die Schnelle sämtliche Datei- und Verzeichnisnamen ändern kann, dann kann man diesen mit dem Schalter -e benutzen.

Quellcode

1
mved -e /usr/bin/kate datei1 datei2 *.pdf test/*

MfG ello

3

19.01.2007, 15:40

RE: Scriping

Kurtzgefasst:

Du willst alle Dateien/Verzeichnisse umbenennen:

??Name
BoeName

oder??
Meine Rechtschreibfehler sind gewollt und unterliegen dem Copyright des Verfassers, es sei denn, sie sind explizit unter die GPL gestellt .....

Außerdem sind sie ein Ausdruck der Persönlichkeit des Schreibers!

4

19.01.2007, 15:52

Ich glaube er meint:

BName -> Boeame

5

19.01.2007, 15:54

Also mit find alle Datein/Verzeichnisse, die ersten 2 Buchstaben abscheiden, 3 Buchstaben einfügen und einen mv damit füttern.

Sorry, habe momentan keine Unix-Maschiene vor mir (oder in griffweite) so das ich es reinschreiben könnte ...
Meine Rechtschreibfehler sind gewollt und unterliegen dem Copyright des Verfassers, es sei denn, sie sind explizit unter die GPL gestellt .....

Außerdem sind sie ein Ausdruck der Persönlichkeit des Schreibers!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Wernieman« (19.01.2007, 15:55)


6

19.01.2007, 15:55

Da ich mir nicht genau sicher war, wie es gemeint ist, habe ich halt eine Methode gewählt, die alle Wünsche befriedigen kann. Zwar nicht optimal, aber es funktioniert. ;)

Wie sieht's eigendlich mit krename aus. Habe es nicht installiert. Ich weiß aber, dass krename von Krusader genutzt wird um im Batchmode zu verschieben und umzubenennen.

MfG ello

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ello« (19.01.2007, 15:58)


7

19.01.2007, 19:46

Zitat

BName -> Boeame


so würde ich es gerne haben.

und das auf alle Unterverzeichnisse.

Das von ello werde ich mal versuchen. Wee jemand noch eine andere Idee hat wäre ich sehr dankbar.

Gruß

8

19.01.2007, 20:32

dieses skript is, wenn die dateien alle in nem ordner enthalten sind:

Zitat


#! /bin/bash
cwd=`pwd`
prefix=${1:-"./"}
out=${2:-"out"}

for d_one in ${prefix}*
do
if [ -d $d_one -a "$d_one" != ".." ]; then
if [ ! -z $prefix ]; then
mv $d_one $end_name
fi
fi
done

vielleicht muß man noch ein wenig mit $end_name rumpsielen, vielleicht kennt aber auch jemand ne bessere lösung mit awk, da kenne ich mich leider nich aus

9

19.01.2007, 22:14

Zitat

Original von AgentNice
dieses skript is, wenn die dateien alle in nem ordner enthalten sind:

Zitat


#! /bin/bash
cwd=`pwd`
prefix=${1:-"./"}
out=${2:-"out"}

for d_one in ${prefix}*
do
if [ -d $d_one -a "$d_one" != ".." ]; then
if [ ! -z $prefix ]; then
mv $d_one $end_name
fi
fi
done

vielleicht muß man noch ein wenig mit $end_name rumpsielen, vielleicht kennt aber auch jemand ne bessere lösung mit awk, da kenne ich mich leider nich aus


Wenn das jetzt noch alle Unterverzeichnisse durchgeht und auch dort die Namen ändert wäre super (incl. Verzeichniss)

10

19.01.2007, 22:20

Ich verstehe ja nun, um was es genau geht. Aber wo liegt denn da der praktische Nutzen? Ich bin nun schon einige Szenarien durchgegangen, doch konnte mir bisher keiner einfallen. Wofür brauch man eine Änderung am 2ten Character?

Mooooment! "Böse Onkelz"?

Wenn das (oder etwas in der Art) der Fall sein sollte, dann würde ich mir erst garnicht sone Mühe machen. Da es auch mit mmv funktioniert. Ist aber schon ein Weilchen her, wo ich etwas in solchen Mengen umbenennen musste.

MfG ello

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ello« (19.01.2007, 22:23)


11

19.01.2007, 22:32

wie meinst du das ello?

hm, mit mehreren unterordnern wird schwer, da muß ich passen wenn die variabel sind, bzw. ein weilchen überlegen :D

12

19.01.2007, 22:44

Nunja, die Frage ist, um wieviele Unterordner geht es und wie oft wird das evtl. mal fertige Script gebraucht?
Denn wenn ich mit meiner Vermutung richtig liege, dann ist es leichter ohne Skripts in einigen Ordnern ein mmv/zmv Befehl auszuführen als sich stundenlang den Kopf zu zerbrechen, wie man das jetzt mit einem einzigen Befehl anstellt.
Na klar, das ist mal eine schöne Denkaufgabe und an einer Lösung wäre ich auch interessiert. Nur "wenn ich richtig liegen sollte", dann ist mmv/zmv der Weg mit dem geringsten Wiederstand.

[edit]
@AgentNice AgentNice: Deine Lösung ist recht einfallsreich und mit Sicherheit eine gute Grundlage den Weg zu beschreiten. Aber von der Bash habe ich mich sehr weit abgewand. In der zsh würde ich dafür zmv benutzen. Doch da müsste ich mich auch erst wieder einlesen um da zu einem Ergebnis zu kommen. Daher Respekt, dass es so schnell zu einem Schellskript kam. Perl wäre mit Sicherheit auch eine Möglichkeit.

Zudem fällt mir gerade das Paket "app-text/convmv" ein. Wenn ich mit meiner Theorie immernoch richtig liegen sollte, dann könnte das vielleicht auch helfen. Als Skriptsprache ist in diesem Fall wohl Perl prädestiniert.
[/edit]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ello« (19.01.2007, 22:51)


13

20.01.2007, 09:37

hm, von den *mv befehlen hab ich keine ahnjung, perl hatte ich auch mal, würde sicher gehen, aber für sowas is die bash meiner meinung nach ausreichend, für file sachen, naja aber ich glaube python is aktueller als perl

14

20.01.2007, 09:57

muss das denn über die konsole gehn? oder geht auch ein grafisches tool.
soweit ich weiß gibts da auch n tool namens krename.

war vor kurzen kde programm der woche (oder monat, weiß nicht mehr so genau *g*)
ich schau mal ob es mit dieser aufgabenstellung fertig wird.

Edit:
jo es klappt :)

einfach die vortgeschrittene ansicht auswählen.
dann die einzelen Dateien hinzufügen (man kann auch n ordner angeben und sagen dass alle dateien in den unterordnern mitgenommen werden sollen)

im letzen reiter unter template

Quellcode

1
Boe[$3-]

Boe vorne anhängen
bei dem original ab dem dritten buchstaben beginnen

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »HWM-Rocker« (20.01.2007, 10:10)


15

20.01.2007, 12:42

@HWM-Rocker Danke für die Bestätigung! ;)

Zitat

Original von ello
Wie sieht's eigendlich mit krename aus. Habe es nicht installiert. Ich weiß aber, dass krename von Krusader genutzt wird um im Batchmode zu verschieben und umzubenennen.


@AgentNice
Python<->Perl... Aktueller hin oder her. Fakt ist doch, das Perl gerade im bereich der Zeichenkettenmanipulation die Nase vorn hat. (auch Dateinamen sind dort nichts anderes als Zeichenketten) Doch wer sich mit Python sicherer fühlt, wird es damit auch zu stande bringen können.

MfG ello

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ello« (20.01.2007, 12:44)


16

20.01.2007, 22:55

Hallo,

vielen dank an alle die geholfen haben.

Letzendlich hat krename alles das gemacht was ich wollte.

@ello Die Bösen Onkels waren es nicht!!

Gruß

17

21.01.2007, 00:57

Das war auch nur eine Vermutung. ;)

18

21.01.2007, 11:06

Also wegen rekursivem Aufruf, ich hab hier ein Skript, um mir bei allen Dateien im angegebenen Ordner und allen Unterordnern die Leerzeichen in Unterstriche umzuwandeln, Umlaute anzupassen usw. Dort braucht man ja nur die "Ersetzungsregel" anpassen und den Test, ob es eine Datei ist entfernen...

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
cd "$1"
MY_SELF=`basename $0`
PWD=`pwd`

for FILE in *
do
        NEWNAME=`echo $FILE | sed s/ä/ae/g | sed s/ö/oe/g | sed s/ü/ue/g | sed s/ß/ss/g | sed s/\ /_/g | sed s/__/_/g | sed s/@/_AT/g | sed s/!/_Ausrufezeichen/g | sed s/?/_Fragezeichen/g`
        mv "$FILE" "$NEWNAME"
done

for FILE in *
do
        if [ -d "$FILE" ]
        then
                PWD=`echo $FILE`
                $MY_SELF "$PWD"
                #Script ruft sich selbst auf fuer das Unterverzeichnis
        fi
done



Setz den Thread doch dann nächstesmal auf gelöst, wenn das "Problem" nicht mehr besteht!
Hab ich jetzt für dich mal gemacht und auch das "r" für "Script" eingefügt" (Bash Scipt für mv).
"Erst nachdem wir alles verloren haben, haben wir die Freiheit, alles zu tun."
"It's only after we've lost everything, that we're free to do anything!"

Jabber: Die ID kann via PN erfragt werden.

19

21.01.2007, 11:16

Danke maggu2810,

hätte ich sonst heute noch gemacht.

Gruß

20

21.01.2007, 11:17

War ich wohl einfach zu "schnell". ;)
Naja, wenns keiner vergessen würde, dann bräuchte ich auch nicht danach zu schauen, aber wer liest schon die Forumskonventionen... ;)
Gruß,
Markus
"Erst nachdem wir alles verloren haben, haben wir die Freiheit, alles zu tun."
"It's only after we've lost everything, that we're free to do anything!"

Jabber: Die ID kann via PN erfragt werden.