PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aufruf einer zufälligen Datei in einem definierten Verzeichnis



Ede
08.05.07, 10:55
Hallo.
Ich suche nach einer Möglichkeit, in einem Verzeichnis zufällig eine Datei auszuwählen. Also es geht darum, dass der Windowmaker bei jedem Start ein zufälliges Hintergrundbild setzt. Hintergrundbild beim Start einstellen, ist ja kein Problem, wird mit Hilfe von wmsetbg in ~/GNUstep/Library/WindowMaker/autostart erledigt. Jetzt will ich in ein Verzeichnis Bilder reintun und davon eins zufällig auswählen lassen. Die Bash hat doch bestimmt schon eine fertige Lösung dafür. Vielleicht gibt es ganz einfach ein Zeichen dafür, also so was in der Art wie "*".
fbsetbg von Fluxbox ist diesbezüglich wmsetbg von WindowMaker überlegen. fbsetbg bringt die Option "-r" mit, um genau das zu machen, was ich will, wmsetbg hat so was leider nicht. Deswegen habe ich an eine Lösung auf der Ebene der Bash gedacht.

Ede
08.05.07, 11:31
Da haben wir was:
http://blog.planet-uwe.de/plugin/tag/Shellscript
Nicht so einfach wie ich gedacht habe, aber es funktioniert.

jeppo
08.05.07, 12:16
hmm ev mit $RANDOM
ups ist deinem link drin

Ede
08.05.07, 13:33
Das Script funktioniert nicht sauber.


#!/bin/bash
SOURCELOC="$HOME/wallpapers/"
FLIST=`ls ${SOURCELOC}`
NUM=`echo -e "${FLIST}"|wc -l`
PAPER=$(( ${RANDOM} % ${NUM} ))
FNAME=`echo -e "${FLIST}"|head -n ${PAPER}| tail -n 1`
OPTS="s#^Wallpaper=.*#Wallpaper=${SOURCELOC}${FNAME}#"
sed -ie "${OPTS}" $HOME/.kde/share/config/kdesktoprc

Es kommt ab und zu (ich habe alles mögliche mit unterschiedlichen Bildern, unterschiedlicher Anzahl von Bildern von 1 bis 5 und unterschiedlichen Dateinamen versucht und keine Systematik entdeckt) vor, dass die Variable FNAME einfach mal leer ist, also keine Zeichen enthält. Dann bringt natürlich die spätere Weiterverarbeitung von $FNAME nichts.

Ede
08.05.07, 14:13
Ich habe noch ein anderes Script gefunden: http://unixtips.org/articles/background.php3
Das werde ich jetzt mal ausgiebig testen.

buzz768
08.05.07, 14:16
PAPER=$(( ${RANDOM} % ${NUM} + 1 ))

Sonst kommt da halt auch mal 0 heraus.

Ede
08.05.07, 14:58
Jawohl! Vielen Dank. Werde es direkt ausprobieren.

Das Perl Script von http://unixtips.org/articles/background.php3 hat leider auch einen Fehler. Es funktioniert nur in ca. 9 von 10 Fällen (mit 4 Dateien in einem Verzeichnis getestet). In einem von 10 Fällen wird dem wmsetbg nur der Verzeichnisname als Bilddatei übergeben. Dann meldet wmsetbg folgendes:

wmsetbg Warnung: /Bildverzeichnis/: could not load image file used in texture:error reading from file.
Also die normale Fehlermeldung, wenn man dem wmsetbg einen Verzeichnisnamen als Argument übergibt.

Ede
08.05.07, 15:15
Mit deiner Korrektur scheint das Bash-Script perfekt zu funktionieren. Sehr gut.