Script: Lege Verknüpfungen in Ordner foo für find-Ausgabe an

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
pluvo

Script: Lege Verknüpfungen in Ordner foo für find-Ausgabe an

Beitrag von pluvo » 13.09.2010 00:55:06

Hi!

Ich bastele gerade an einen Script.

Situation:
Es gibt einen Ordner bar (/srv/data/bar/). In diesem Ordner gibt es zahlreiche Ordner. In den wichtigen Ordnern liegt immer eine Datei .wichtig.

Beispiele:
  • /srv/data/bar/Backup/.wichtig
  • /srv/data/bar/Fotos/.wichtig
  • /srv/data/bar/Whatever/
In dem Ordner Whatever liegt keine Datei .wichtig, weil dieser Ordner nicht wichtig ist.

Die wichtigen Ordner kann ich mit find finden:

Code: Alles auswählen

find /srv/data/bar/ -name ".wichtig" -type f
Aufgabe:
Ich möchte nun im Ordner /srv/data/foo/ automatisch symbolische Verknüpfungen erzeugen, die auf die wichtigen Ordner zeigen. Ich muss aber bei den symbolischen Verknüpfungen aufpassen, dass diese relativ auf das Zielverzeichnis verlinken. (Sonst klappt die Verknüpfung mit der Samba-Freigabe nicht.)

Beispiel:

Code: Alles auswählen

cd /srv/data/
ln -s ../bar/"$WichtigerOrdner" foo/"$WichtigerOrdner"
Problem:
Ich weiß nicht so ganz, wie ich das mit find und -exec mache. Bei der find-Ausgabe bekomme ich den vollen Pfad (/srv/data/bar/Backup/.wichtig) und ich brauche nur den Ordnernamen (Backup).

Falls noch Fragen sind, einfach her damit :wink:

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: Script: Lege Verknüpfungen in Ordner foo für find-Ausgab

Beitrag von catdog2 » 13.09.2010 01:12:45

So spontan:

Code: Alles auswählen

% basename `dirname /srv/data/bar/Backup/.wichtig`
Backup
Unix is user-friendly; it's just picky about who its friends are.

pluvo

Re: Script: Lege Verknüpfungen in Ordner foo für find-Ausgab

Beitrag von pluvo » 13.09.2010 01:53:39

Danke, das klappt schon ein bisschen besser.

Allerdings habe ich auch Ordnernamen mit Leerzeichen und Klammern usw. Zum Beispiel:
  • /srv/data/bar/Test (Test)/.wichtig
Wenn ich die Befehle nacheinander aufrufe klappt es:

Code: Alles auswählen

$ dirname "/srv/data/bar/Test (Test)/.wichtig"
/srv/data/bar/Test (Test)
$ basename "/srv/data/bar/Test (Test)"
Test (Test)
Ein Aufruf:

Code: Alles auswählen

$ basename `dirname "/srv/data/bar/Test (Test)/.wichtig"`
Test

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: Script: Lege Verknüpfungen in Ordner foo für find-Ausgab

Beitrag von catdog2 » 13.09.2010 01:56:12

Du brauchst noch "" um die ausgabe von dirname:

Code: Alles auswählen

% basename "`dirname "/srv/data/bar/Test (Test)/.wichtig"`"
Test (Test)
Unix is user-friendly; it's just picky about who its friends are.

pluvo

Re: Script: Lege Verknüpfungen in Ordner foo für find-Ausgab

Beitrag von pluvo » 13.09.2010 02:02:01

Ah genau, richtig. Danke :)

Ich habe das ganze nun erstmal so gelöst:

/usr/local/bin/wichtig

Code: Alles auswählen

#!/bin/bash
cd /srv/data/
rm -rf foo/
mkdir foo
find /srv/data/bar/ -name ".wichtig" -type f -exec w_link {} \;
/usr/local/bin/w_link

Code: Alles auswählen

#!/bin/bash
WichtigerOrdnerLang="$1"
WichtigerOrdner=$(basename "`dirname "$WichtigerOrdnerLang"`")

cd /srv/data/
ln -s ../bar/"$WichtigerOrdner" foo/"$WichtigerOrdner"
Lässt sich sicher noch optimieren, aber es funktioniert erstmal. 8)

Antworten