|
|
|
|
Weird Scripting Corner |
Black Star
Der Pate [Admin]
Dabei seit: 11.12.2001
Beiträge: 2.282
Herkunft: /dev/stderr
|
|
Weird Scripting Corner |
|
Hier koennt ihr eure abgefahrensten Shell-Scripte posten.
Sinn und Zweck ist egal, hauptsache es sieht richtig freakig aus
Dahinter steckt, dass jeder mal sehen kann zu was die *nix-Shells mit ihren vielen Werkzeugen faehig sind. Auch kann man sich, sobald sich hier mal einiges angesammelt hat, Bausteine fuer seine eigenen Scripte zusammensuchen, da viele Ideen/Tricks doch relativ haeufig auftreten.
Falls ihr Bash-3 oder perl oder sonst was fuer neue Tools verwenden solltet, dann schreibt es fett dran, damit keiner wahnsinnig wird, falls was nicht klappt.
Ein Post pro Script, bitte keine Fragen in diesem Thread. Schreibt kurz dran, was das soll und mit welchen Tricks ihr das Problem geloest habt. Doppelposts sind also zulaessig, wenn ihr zwei sinnvolle Scripte auf einmal vorstellt.
Bitte den Quellcode nicht uebermaessig kommentieren, da es die Lesbarkeit stoert und das freakige Aussehen von Shell-Scripten zerstoert
Shell-Scripte muessen kryptisch aussehen und einen verwirren *fg*
Ich werde in diesem Post eine Art Inhaltsverzeichnis der bemerkenswerten Scripte erstellen.
- m3u-Creator von Black Star - verwendet: bash, sed, find, grep, for-schleife
Nochmal: Bitte keine Fragen in diesem Thread - nur Scripte!
Fragen koennen im Support-Thread zu diesem Thread gestellt werden, damit die Scripte halbwegs kompakt beisammen sind und nicht dauernd von Fragen unterbrochen werden.
__________________
vescere bracis meis
|
|
19.12.2004 23:06 |
|
|
phlox81
Bote des Lichts und Moderator
Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo
|
|
|
19.12.2004 23:25 |
|
|
Black Star
Der Pate [Admin]
Dabei seit: 11.12.2001
Beiträge: 2.282
Herkunft: /dev/stderr
Themenstarter
|
|
|
|
Dann habe ich auch gleich das erste Script im Angebot: Einen Playlist-Generator.
Ich habe meine mp3/ogg-Datein in einem Verzichnisbaum in der Form /<pfad zum verzeichnis>/<Anfangsbuchstabe der Band>/<Band>/<Album>[/<CD1,2,...>]
In einem anderen Verzeichnis sollen Playslists der Form <Band> - <Album>[ - CD1,2,..].m3u erstellt werden.
Dazu lasse ich eine Schleife ueber alle Verzeichnisse laufen, wobei ich Leerzeichen substituieren muss, da die for-Schleife das Leerzeichen als Seperator benutzt. In der Schleife muessen dann die Leerzeichen zuruecksubstituiert werden.
Dann wird gecheckt, ob dieses Verzichnis mp3 oder ogg-Files enthaelt und eine Playlist erstellt. Dann wird geprueft, ob alles geklappt hat.
Zum Schluss wird eine kleine Statistik ausgegeben.
Vorraussetzungen: keine ungewoehnlichen (bash, find, sed)
Trap: 1) Das find, das die Playlist erstellt, muss durch einen sort gepiped werden, da for ... `find ....` nicht sortiert ist. Die Dateinamen muessen also sortierbar sein, ohne dass die Struktur des Albums zerstoert wird, dh. die Dateinamen muessen am Anfang durchnummeriert sein, was allerdings Standard ist.
2) Wer eine andere Struktur verwendet, muss ein paar Sachen anpassen.
In Zeile 26 wird der Dateiname der m3u-Datei erzeugt. Wer Dateibaeume der Form <pfad>/<band>/<album> hat (und nicht wie ich <pfad>/<anfangsbuchstabe>/<band>/<album>), muss beim ersten sed das \/. rausnehmen (der Punkt steht fuer ein beliebiges Zeichen, also hier den Anfangsbuchstaben).
3) Die erste Bedingung (Zeile 18 ) siebt Verzeichnisse aus, die man nicht beruecksichtigen will, bei mir solche die mit einem Leerzeichen anfangen - wers nicht braucht kanns auch rausschmeissen
4) Als Seperator fuer sed habe ich den Doppelpunkt verwendet, da ich einfach mal angenommen habe, dass der am seltensten vorkommt. Falls doch, habt ihr ein Problem
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
|
#!/bin/bash
# search and output path
media_path=/media/Mp3
m3u_path=.
# init some counters
c_error=0
c_m3u=0
c_m3udamag=0
c_lost=0
c_all=0
c_ok=0
c_dirs=0
for i in `find $media_path -type d | sed "s/ /%%blank%%/g"`; do
path=`echo $i | sed "s/%%blank%%/ /g"`;
[ `echo $path | grep -c "$media_path/ "` -eq 1 ] && \
{
echo "omitting $path..."
} || {
files=`find "$path" -maxdepth 1 -iname '*.mp3' -o -iname '*.ogg' | grep -c ""`
[ $files -gt 0 ] && \
{
echo "found $files files in $path..."
filename=`echo $path | sed "s:$media_path\/.\/::" | sed "s:/: - :g" | sed "s:_: :g"` &&
{
filename="$m3u_path/$filename.m3u"
echo ">>> creating $filename..."
echo "#EXTM3U" > "$filename"
find "$path" -maxdepth 1 -iname '*.mp3' -o -iname '*.ogg' | sort >> "$filename"
c_m3u=$(($c_m3u+1))
echo -n ">>> checking file..."
c_count=1
for j in `cat "$filename" | grep -v -e "^#" | sed "s/ /%%blank%%/g"`; do
file=`echo $j | sed "s/%%blank%%/ /g"`
[ -e "$file" ] && \
{
echo -n "$c_count "
c_ok=$(($c_ok+1))
} || {
echo -e "\nLOST FILE: $file"
c_lost=$(($c_lost+1))
}
c_count=$(($c_count+1))
c_all=$(($c_all+1))
done
echo
} || {
echo "FAILED: could not parse $path!"
c_error=$(($c_error+1))
}
} || {
echo "omitting empty path $path..."
}
}
c_dirs=$(($c_dirs+1))
done
echo "done - processed $c_dirs directories, created $c_m3u m3u-files, linked $c_all files, $c_lost files lost, $c_ok files ok, $c_error strange errors" |
|
TODO: id3-tags in die Playlists einbauen.
__________________
vescere bracis meis
|
|
19.12.2004 23:26 |
|
|
Rudolf
BlackBoarder
Dabei seit: 16.09.2003
Beiträge: 958
|
|
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
|
#!/bin/sh
CWD=`pwd`
TMP=${TMP:-/tmp}
PKG=$TMP/package-mozilla-firefox
# This is not a source build script. Rather, it builds a Slackware
# package from the official binary tarball available from mozilla.org.
# Using the official binaries seems like the most direct way to satify
# the Mozilla project's concerns about quality control (and thus to
# provide the most quality-certified package possible), and therefore
# be able to use the official trademarks and logos.
#
# Thanks to the folks at the Mozilla Foundation for permission to
# distribute this, and for all the great work! :)
VERSION=1.0.4
ARCH=${ARCH:-i686}
BUILD=1
if [ ! -d $TMP ]; then
mkdir -p $TMP
fi
rm -rf $PKG
mkdir -p $PKG/usr/lib
( cd $PKG/usr/lib
tar xzf $CWD/firefox-$VERSION.tar.gz
mv firefox firefox-$VERSION
ln -sf firefox-$VERSION firefox
cd firefox-$VERSION
zcat $CWD/mozilla-firefox-simple.diff.gz | patch -p1 --verbose --backup --suffix=.orig
if [ ! $? = 0 ]; then
exit 1
fi
zcat $CWD/mozilla-firefox-thunderbird.diff.gz | patch -p1 --verbose --suffix=.orig
if [ ! $? = 0 ]; then
exit 1
fi
rm -f defaults/pref/firefox.js.orig
)
if [ ! $? = 0 ]; then
exit 1
fi
mkdir -p $PKG/usr/bin
( cd $PKG/usr/bin
ln -sf /usr/lib/firefox-$VERSION/firefox .
chown -R root:bin .
)
mkdir -p $PKG/usr/share/applications
cat $CWD/mozilla-firefox.desktop > $PKG/usr/share/applications/mozilla-firefox.desktop
mkdir -p $PKG/usr/share/pixmaps
cat $CWD/firefox.png > $PKG/usr/share/pixmaps/firefox.png
mkdir $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
makepkg -l y -c n $TMP/mozilla-firefox-$VERSION-$ARCH-$BUILD.tgz |
|
Hier mal ein typisches Slackware Kompilierscript.
Es ist also normal, wenn der SuSe User nicht versteht, was hier gemacht wird
|
|
08.06.2005 22:44 |
|
|
PygoscelisPapua
BlackBoarder
Dabei seit: 20.12.2003
Beiträge: 1.309
Herkunft: Kiel, Schleswig-Holstein, Germany
|
|
Hm... da hab ich auch was eher lustiges... ist nicht von mir - das hatte mal jemand in seiner Signatur auf nem Board, mit dem Hinweis, dass man dieses Skript NICHT benutzen sollte... ich wiederhole es: N I C H T - wer es doch tut, tuts auf eigene Verantwortung und kann weder mich noch den Ersteller dieses Skript für Systemschäden verantwortlich machen.
Die Signatur ist:
Zitat: |
perl -e '$??s:;s:s;;$?::s;;=]=<%-{>-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Man sollte nicht alles ausfuehren was man in einer Signature liest.
|
Sieht extrem freakig aus, und vor allem, sieht man nicht, was es eigentlich tut [und das was es tut, könnte man auch mit einem Befehl ganz leicht ausführen *fg* - also einen tieferen Sinn, außer User nen fiesen Streich spielen, hat das Skript nicht].
Ich sage es nochmal Benutzt dieses Skript N I C H T !
Wer wissen möchte, was das jetzt macht, der schaue hier. Wer jetzt noch n bissln was zum lachen haben möchte, findet des hier.
__________________
There are only two kinds of programming languages: those people always bitch about and those nobody uses.
(Bjarne Stroustrup)
*
Moving on to pastures new
GPG Key
|
|
08.06.2005 23:56 |
|
|
Misel
Hüter des Kitkat
Dabei seit: 02.11.2002
Beiträge: 1.203
Herkunft: live://home.berlin.d
e
|
|
shamelessly plugged from another forum:
code: |
1:
|
perl -e '$n="\e[0;40;32m";for(1..10){print"\ec$n\n".$"x(15)."\e[1;35mY$n" .$"x15;for(1..8){print$/.$"x($a=16-$_);$c=int rand($d=2*$_);for(2..$d){$f=31+int rand(3);print($_-$c?"X":"\e[$f;1m*$n")}print$"x$a}print $/.$"x(31)."\e[0m\n".$"." Merry Christmas ".$/x2;select$q,$q,$q,0.5}' |
|
ja, diesen Code kann man ausführen. Ist aber nicht die korrekte Jahreszeit dafür
__________________ LAUFT! Ich spiele KILLERSPIELE!
|
|
09.06.2005 10:44 |
|
|
LX
El Comandante en Jefe
Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx
|
|
Auch wenn's dem Sinn dieses Threads irgendwie widerspricht...
code: |
1:
|
vim -c ":%s/^/UryybDJbeyqB:QE-CYK/|:%s/[B-E]/ /Ig|:normal ggVGg?" |
|
__________________ JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett
|
|
09.06.2005 14:10 |
|
|
|
|
|
|