SlideShare ist ein Scribd-Unternehmen logo
1 von 54
Downloaden Sie, um offline zu lesen
Some Bashing II - Mit der
Kommandozeile Abläufe automatisieren
Linux-Infotag Augsburg 16. April 2016
Andreas Steil
Linux Consultant & Trainer
B1 Systems GmbH
steil@b1-systems.de
B1 Systems GmbH - Linux/Open Source Consulting,Training, Support & Development
Some Bashing II: Mit der Kommandozeile
Abläufe automatisieren
(Workshop-Unterlagen)
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 2 / 54
Agenda (Beispiele)
Paar Grundlagen:
Bash
Shellscripts
Aufbau
Anwendung
Automatisierung
Beispiele:
1 Bilder automatisch umwandeln/verkleinern
2 PDFs (z.B. aus Scans) zusammenführen
3 Umlaute in HTML-Code konvertieren
4 Konfigurationsdateien bereinigen
5 Dateien automatisch umbenennen
6 Musik abspielen mit der Kommandozeile mit eigenen
Wiedergabelisten
7 Id-Tags von MP3s auslesen und damit automatisch Musikdateien
benennen
8 . . .
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 3 / 54
Beispiel 1: Bilder automatisch
umwandeln/verkleinern
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 4 / 54
Bilder verkleinern: Ein (un)beholfener Weg
„Es ist eine Krux mit den PDF-Dateien: Wer sie selbst erstellt – etwa beim
Scannen – findet schnell heraus, dass die Dateigröße enorm ist. Wer
Online-Bewerbungsmappen oder andere Dokumente per E-Mail verschicken
will, stößt dabei schnell an die Grenzen gängiger Mailanbieter, zumal große
E-Mails in vielen Unternehmen geblockt werden. Mit dem Online-Service
SmallPDF gehört dieses Problem der Vergangenheit an: Das Online-Tool
kann PDF-Dateien ganz eingach komprimieren, egal ob unter Windows,
Mac OS X oder Linux. Alles, was Ihr dazu braucht, ist ein Browser – und
ein wenig Upload-Bandbreite.“ Quelle: http:
//www.tutonaut.de/tipp-pdf-dateien-schnell-und-einfach-auf-allen-systemen-verkleinern.html
Problem:
„Natürlich gibt es bei der Nutzung von Onlinediensten dieser Art ein
gewisses Risiko, dass die Daten von Dritten eingesehen werden. Der Dienst
schrumpft die PDF-Dateien und verspricht, diese anschließend – im
Stundentakt – vom Server zu löschen. ...“
Lösung: Kommandozeilenprogramm convert (Paket „ImageMagick“)
=> kein Risiko mit der Bash . . .
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 5 / 54
Bilder konvertieren mit convert (Beispiele)
convert ⇒ Paket „ImageMagick“
(http://www.imagemagick.org/script/convert.php)
Bild in anderes Format konvertieren (im Beispiel ins PDF-Format):
# convert scan.jpg scan.pdf
Mini-Ansicht erstellen (im Beispiel 120x120 Pixel):
# convert -size 120x120 GroßesBild.tiff -resize 120x120 thumbnail.png
Bild verkleinern (im Beispiel auf 50%):
# convert bild.jpg -resize 50% bild.png
Bildgröße verändern (im Beispiel auf 768x1024 Pixel):
# convert -resize 768x1024 scan.jpg
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 6 / 54
Umwandeln eines kompletten Verzeichnisses
Umwandeln eines kompletten Verzeichnisses:
for BILD in *.jpg; 
do 
convert -resize 800x600 $BILD ./kleiner/$BILD; 
done
*.jpg gibt das Format der Bilder an (alle gängigen Bildformate
möglich)
-resize 800x600 gibt die neue Größe der Bilder an
neue Bilder werden in (vorhandenem) Unterordner ./kleiner
gespeichert
(Der  kennzeichnet einen Zeilenumbruch – wegen der
übersichtlicheren Darstellung.)
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 7 / 54
Beispiel 2: PDFs (z.B. aus Scans)
zusammenführen
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 8 / 54
PDFs zusammenführen mit pdftk
Dokumentationen
Bewerbungen
Hausarbeiten
Scans
. . .
Erst alles ins gleiche Format überführen (im Beispiel PDF):
# convert Zeugnis_1.jpg Zeugnis_1.pdf
. . . dann zusammenführen:
# pdftk Anschreiben.pdf Lebenslauf.pdf Zeugnis_1.pdf 
cat output Bewerbung.pdf
. . . oder:
# pdftk Hausarbeit.pdf Eigenständigkeitserklärung.pdf 
cat output Hausarbeit_John_Doe.pdf
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 9 / 54
Skripte (sehr einfache Einführung)
Skript = Befehle in Textdatei zum wiederholten Aufrufen
Skript ausführbar machen: chmod +x <skriptname>
Skript aufrufen: <skriptname> (/bin/bash <skriptname>)
bei Bash-Skripten erste Zeile #! /bin/bash
(Shebang-Anweisung) ⇒ ausführender Kommandointerpreter
Einfaches, aber freundliches Skript erstellen (Beispiel):
$ echo Hallo Du da! > hallo.sh
Skript ausführbar machen:
$ chmod +x hallo.sh
Skript aufrufen/ausführen:
$ hallo.sh
Hallo Du da!
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 10 / 54
Skript zum Zusammenführen von PDFs mit
for-Schleife
Skript zum PDFs zusammenführen:
#! /bin/bash
convert ~/LIT_2016/book/cover.jpg ~/LIT_2016/gesamt/gesamt.pdf
for i in $(ls ~/LIT_2016/book)
do
echo $i wird verarbeitet ...
convert ~/LIT_2016/book/$i ~/LIT_2016/gesamt/$i.pdf
pdftk ~/LIT_2016/gesamt/gesamt.pdf ~/LIT_2016/gesamt/$i.pdf 
cat output ~/LIT_2016/gesamt/gesamt_1.pdf
mv ~/LIT_2016/gesamt/gesamt_1.pdf ~/LIT_2016/gesamt/gesamt.pdf
done
echo Ich habe fertig!
okular ~/LIT_2016/gesamt/gesamt.pdf &
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 11 / 54
Bequemer & übersichtlicher: Suchpfad in
eigenes Skriptverzeichnis
In der Umgebungsvariablen PATH sind Verzeichnisse als
(Such-)Pfade für Befehle (auch Skripte) definiert.
kann neu definiert und dadurch erweitert/geändert werden
(Trennzeichen: :)
Pfadangabe zum Skript kann so beim Aufruf erspart werden.
dauerhaftes Ändern der Umgebungsvariable PATH z. B. im
Anmeldeskript des Users /.bashrc
Umgebungsvariable PATH abfragen:
$ echo $PATH
/home/<user>/bin:/usr/local/bin:/usr/bin:/bin
Umgebungsvariable PATH um Verzeichnis erweitern (temporär):
$ PATH=$PATH:/home/b1/LIT_2016/scripte
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 12 / 54
Beispiel 3: Umlaute in HTML-Code
konvertieren
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 13 / 54
Vorspann: etwas sed
sed = Stream Editor
Syntax: z. B. sed ’s/regexp/replacement/’ ...
hilfreiche Befehle/Optionen:
s ersetzen (substitute)
g jedes (nicht nur erstes) Vorkommen (global)
-e Verknüpfung mehrerer Editierbefehle (z. B. sed -e
’<befehl1>’ -e ’<befehl2>’; ⇒ Besipiel 5)
-f Anwendung auf angegebene Datei statt Stream
(file)
Anwendung (Beispiel):
# echo abc | sed ’s/abc/yxz/’
yxz
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 14 / 54
sed – Editierbefehle
Einige Editierbefehle von sed
Befehl Funktion
a Einfügen nach der aktuellen Zeile
i Einfügen vor der aktuellen Zeile
d Löschen
p Ausgeben
c Zeilen ersetzen
s Suchen und Ersetzen
y Zeichen durch andere Zeichen ersetzen
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 15 / 54
Suchen und Ersetzen mit sed
eine der wichtigsten Funktionen von sed: Suchen & Ersetzen
Suchbegriff meist regulärer Ausdruck
nur erstes Vorkommen pro Zeile wird ersetzt, es sei denn, Sie
verwenden Parameter g (global)
Erstes Vorkommen pro Zeile wird ersetzt
$ sed ’s/Latex/LaTeX/’ datei
Alle Vorkommen werden ersetzt
$ sed ’s/Latex/LaTeX/g’ datei
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 16 / 54
Anwendung von sed – Beispiele
Beispiel: Zeile 12 bis Ende der Datei löschen
$ sed ’12,$d’ datei
Beispiel: Zeile 5 durch „lalala“ ersetzen
$ sed ’5c lalala’ datei
Bestimmte Buchstaben ersetzen
$ echo "P1 Sysdems" | sed -e ’y/Pd/Bt/’
(Konfigurations-)Dateien suchen und Kommentare entfernen
# find /<pfad>/ -type f -iname "*.conf" -exec sed -i ’/^#/d’ ’{}’ ;
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 17 / 54
Umlaute in HTML-Code konvertieren mit sed
Anwendung von sed (ein Buchstabe):
# echo Örömüz Ürgümül! > umlaute.html
# sed ’s/ü/&uuml;/g’ umlaute.html
Öröm&uuml;z Ürg&uuml;m&uuml;l!
Anwendung von sed (mehrere Buchstaben):
# sed -e ’s/Ö/&Ouuml;/g’ -e ’s/ö/&ouml;/g’ 
-e ’s/Ü/&Uuml;/g’ -e ’s/ü/&uuml;/g’ 
[...] 
umlaute.txt
&Ouuml;r&ouml;m&uuml;z &Uuml;rg&uuml;m&uuml;l!
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 18 / 54
. . . einfacher per Skript, gespeist aus Sed-File:
Sed-File (z.B. ersetzungen):
s/ä/&auml;/g
s/ö/&ouml;/g
...
Skript (z.B. ersetze) für Sed-File (mit Sicherungskopie):
for i in $*
do
cp $i $i.bak
sed -f ./ersetzungen < $i.bak > $i
done
echo "Ich habe fertig !"
Anwendung:
# ersetze umlaute.html
Ich habe fertig !
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 19 / 54
Das Ganze auf einem anderen Rechner . . .
(via ssh):
Skript (z.B. umls_auf):
#! /bin/bash
read -p "Host: " HOST
read -p "User: " USER
read -s -p "Passwort:" PW
read -p "Datei: " DATEI
sshpass -p $PW ssh $USER@$HOST 
-t "sh /pfad/zum/skript/ersetze $DATEI"
Skript ausführen:
$ umls_auf
Host: 8.8.8.8
User: webling
Passwort:
Connection to 8.8.8.8 closed.
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 20 / 54
Beispiel 4: Konfigurationsdateien bereinigen
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 21 / 54
Zeichenketten ermitteln mit grep
grep = global regular expression print
Syntax: z. B. grep [OPTIONS] PATTERN [FILE...]
hilfreiche Befehle/Optionen:
-R auch Unterverzeichnisse durchsuchen (recursive)
-i Groß- und Kleinbuchstaben nicht unterscheiden
(ignore)
-v alle Zeilen ausgeben, in denen der reguläre
Ausdruck nicht erfüllt ist
Anwendung (Beispiel): ’sepp mit grep’:
# grep -iR sepp
namen.txt:sepp
⇒ in der Datei namen.txt gibt’s einen Treffer für sepp
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 22 / 54
Kommentare entfernen mit grep
Kommentarzeilen entfernen mit grep (Beispiel; Ausgabe auf Bildschirm):
# grep ^[^#] /etc/xinetd.conf
defaults
{
log_type = SYSLOG daemon info
log_on_failure = HOST ATTEMPT
log_on_success = HOST EXIT DURATION
[...]
groups = yes
umask = 002
}
includedir /etc/xinetd.d
⇒ Standardausgabe
(^ = am Anfang; regulärer Ausdruck in [...],
hier: [^#] = nicht Kommentarzeichen;
⇒ alle Zeilen, bei denen am Anfang nicht ein Kommantarzeichen steht)
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 23 / 54
Kommentare entfernen mit grep (in Datei)
. . . als interaktives Skript (Ausgabe in Datei):
#! /bin/bash
echo "Dateinamen eingeben:"
read DATEI
cp $DATEI $DATEI.orig
grep ^[^#] $DATEI.orig > $DATEI
echo Kommentarzeilen in Datei $DATEI wurden entfernt, 
das Original als $DATEI.orig gesichert.
⇒ Ausgabe in Datei
(read DATEI erwartet Benutzereingabe, die in der Variablen $DATEI
gespeichert wird.)
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 24 / 54
Dateien suchen mit find
z. B. alle Dateien mit der Endung .conf in /etc suchen:
# find /etc -name *.conf
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 25 / 54
. . . beides zusammen als Skript:
(für ein bestimmtes Verzeichnis)
Skript für das Verzeichnis /etc:
#! /bin/bash
for DATEI in ‘find /etc -name "*.conf"‘
do
echo Datei $DATEI gefunden ...
cp $DATEI $DATEI.orig
grep ^[^#] $DATEI.orig > $DATEI
echo Kommentarzeilen in Datei $DATEI wurden entfernt, 
das Original als $DATEI.orig gesichert.
done
Wichtiger Hinweis: Nur als Beispiel gedacht!
(Nicht zweimal ausführen, sonst werden die Sicherungen
(*.conf.orig) mit der kommentarlosen Version überschrieben.)
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 26 / 54
. . . beides zusammen als Skript:
(Version 2: interaktiv mit Benutzereingabe)
Interaktives Skript (Benutzereingabe mit read):
#! /bin/bash
echo "Bitte Verzeichnis angeben: "; read VERZEICHNIS
for DATEI in $(find $VERZEICHNIS -name "*.conf")
do
echo Datei $DATEI gefunden ...
cp $DATEI $DATEI.orig
grep ^[^#] $DATEI.orig > $DATEI
echo Kommentarzeilen in Datei $DATEI wurden entfernt, 
das Original als $DATEI.orig gesichert.
done
Wichtiger Hinweis: Nur als Beispiel gedacht!
(Nicht zweimal ausführen, sonst werden die Sicherungen
(*.conf.orig) mit der kommentarlosen Version überschrieben.)
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 27 / 54
. . . beides zusammen als Skript:
(Version 3: mit Parameterübergabe)
Skript mit Parameterübergabe ($1 = 1.Parameter):
#! /bin/bash
for DATEI in ‘find $1 -name "*.conf"‘
do
echo Datei $DATEI in Verzeichnis $1 gefunden ...
cp $DATEI $DATEI.orig
grep ^[^#] $DATEI.orig > $DATEI
echo Kommentarzeilen in Datei $DATEI wurden entfernt, 
das Original als $DATEI.orig gesichert.
done
Wichtiger Hinweis: Nur als Beispiel gedacht!
(Nicht zweimal ausführen, sonst werden die Sicherungen
(*.conf.orig) mit der kommentarlosen Version überschrieben.)
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 28 / 54
Beispiel 5: Dateien automatisch umbenennen
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 29 / 54
Problem: Leerzeichen in Datei- und
Verzeichnisnamen
Problem: Leerzeichen in Datei- und Verzeichnisnamen
Leerzeichen ⇒ Metazeichen mit Sonderbedeutung
werden oft anders interpretiert (z. B. als Trennzeichen in der
Bash)
müssen maskiert werden (z. B. mit Backslash in der Bash)
oft unübersichtlich
. . .
Beispiel: Datei mit Leerzeichen (maskiert mit Backslash) anlegen:
# touch la la  la
# ls
la la la
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 30 / 54
Leerzeichen in Texten durch Unterstrich
ersetzen
Leerzeichen durch Unterstrich ersetzen mit tr:
# echo "la la laa" | tr -s ’ ’ ’_’
la_la_laa
Option -s (--squeeze-repeats)
⇒ Wiederholungen von Zeichen werden als ein Zeichen gewertet
Leerzeichen durch Unterstrich ersetzen mit sed:
# echo "la la la" | sed -e ’s/ */_/g’
la_la_la
* ⇒ Leerzeichen, beliebig oft
g (global) ⇒ für alle Vorkommen
⇒ nächster Schritt: für Datei- und Verzeichnisnamen
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 31 / 54
Lösung 1: Parameterexpansion der Bash
Leerzeichen durch Unterstrich ersetzen mit Parameterexpansion:
# for DATEI in ./*; do
mv "$DATEI" "${DATEI// /_}"
done
${DATEI }
⇒ weist die Bash an, den Inhalt der Variable $DATEI zu
expandieren
der / ist der Operator für Suchen und Ersetzen
⇒ ${VarName/A/B} ersetzt das erste Vorkommen von A im
Inhalt von $VarName durch B
${VarName//A/B} ersetzt alle As durch Bs
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 32 / 54
Lösung 2: Skript mit sed
Leerzeichen durch Unterstrich ersetzen mit sed (als Skript):
DIR=$1
for i in $DIR/*
do
ALTER_NAME=$i
NEUER_NAME=‘echo $i | sed ’s/ /_/g’‘
mv $ALTER_NAME $NEUER_NAME
echo $ALTER_NAME wurde in $NEUER_NAME umbenannt.
done
$1 ⇒ 1.Parameter wird übernommen (/pfad/zum/verzeichnis)
Aufruf:
# /pfad/zum/script /pfad/zum/verzeichnis
verzeichnis/la la la wurde in verzeichnis/la_la_la umbenannt.
. . . noch schöner machen . . .
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 33 / 54
Lösung 2: Skript ausbauen
. . . Skript ausbauen:
für Dateien und Verzeichnisse
auch für mehrere Parameter
rekursive Wirksamkeit
Prüfen auf bereits vorhandene Dateien und Verzeichnisse
Hilfe-Funktion
Formales: Shebang-Anweisung, Beschreibung, Autor, . . .
. . .
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 34 / 54
Leerzeichen durch _ ersetzen: Ein perfektes
Skript-Beispiel 1/2
. . . als vorbildliches Skript von Anke Börnig (Teil 1/2):
#!/bin/bash
# Dieses Skript sucht in den angegebenen Verzeichnissen zuerst nach Unter-Verzeichnissen,
# die ein Leerzeichen im Namen haben, und ersetzt die Leerzeichen durch "_".
# Anschliessend passiert das gleiche fuer Dateinamen.
# Autor: Anke Boernig, anke@boernig.de # Datum: 29.05.02
SCRIPTNAME=‘basename $0‘
# Hilfefunktion fuer Hilfetext
hilfe () {
cat << EOF
Benutzung: $SCRIPTNAME Verzeichnis1 [Verzeichnis2 ...]
Das Skript $SCRIPTNAME wandelt alle Leerzeichen innerhalb von
Verzeichnis- und Dateinamen in den angegebenen Verzeichnissen in "_" um.
EOF
}
if [ "$#" -lt 1 ]
then
hilfe
exit 0
fi
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 35 / 54
Leerzeichen durch _ ersetzen: Ein perfektes
Skript-Beispiel 2/2
. . . als vorbildliches Skript von Anke Börnig (Teil 2/2):
for VERZ in $@
do
for TYP in d f
do
while ORIG=$(find $VERZ -type $TYP -name "* *" | head -n1 | grep ’.* .*’)
do
NEU=$(echo $ORIG | sed ’s/ /_/g’)
while test -e $NEU
do
PFAD=${NEU%/*}
echo "Ein(e) Verzeichnis/Datei $NEU existiert schon."
echo "Bitte einen anderen Namen eingeben:"
read NAME
NEU=$PFAD/$NAME
done
echo "$ORIG wird umbenannt nach $NEU."
mv "$ORIG" "$NEU"
done
done
done
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 36 / 54
Problem: sehr viele Dateien umbenennen
Problem: sehr viele MP3s umbenennen, die Namen haben wie
Pippi_Langstrumpf_in_Taka_Tuka_Land-01.mp3 bis
Pippi_Langstrumpf_in_Taka_Tuka_Land-23.mp3
„Da die blöden MP3-Player meiner Kinder aber zu doof sind, so lange
Dateinamen auszuwerten, und dadurch die Reihenfolge immer
durcheinander ist, müsste ich ein paar Hundert Dateien umbenennen,
so dass die Zahlen vorne stehen, also z. B.
Pippi_Langstrumpf_in_Taka_Tuka_Land-01.mp3 ->
01-Pippi_Langstrumpf_in_Taka_Tuka_Land.mp3 bis
Pippi_Langstrumpf_in_Taka_Tuka_Land-23.mp3 ->
23-Pippi_Langstrumpf_in_Taka_Tuka_Land.mp3“
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 37 / 54
Lösung: sed
Dateien automatisch umbenennen (for-Schleife mit mv und sed):
# for i in $(ls *.mp3); 
do mv $i $(echo $i | 
sed -e ’s/([a-z,A-Z,_]{0,})-([0-9]{0,}).mp3/2-1.mp3/’); 
done
. . . etwas aufgedröselt (in Skript-Form):
#! /bin/bash
# for-Schleife: für alle MP3s
# (ls-Befehl könnte auch mit Verzeichnisangabe erfolgen)
for i in $(ls *.mp3)
# innerhalb der for-Schleife: Umbenennen mit ’mv’,
# wobei $i = alter Name, $(echo ...) = neuer Name
do mv $i $(echo $i | 
sed -e ’s/([a-z,A-Z,_]{0,})-([0-9]{0,}).mp3/2-1.mp3/’)
done
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 38 / 54
sed-Ausdruck (etwas entwirrt)
Der sed-Ausdruck:
sed -e ’s/([a-z,A-Z,_]{0,})-([0-9]{0,}).mp3/2-1.mp3/’)
Ersetze Dateinamen (s = substitute):
[a-z,A-Z,_]{0,})-([0-9]{0,}).mp3
⇒ erst alles bis zum Bindestrich (= alle Buchstaben einschl.
Unterstrich) als 1.Teil abtrennen (⇒ 1); nachfolgende
Nummerierung wird 2.Teil (⇒ 2)
. . . mit:
2-1.mp3
⇒ der zweite Teil (2) von oben (= Nummer) wird – durch
Bindestrich getrennt – nach vorne (= vor den ersten Teil 1) gestellt
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 39 / 54
Zum Nachmachen
100 Fake-Dateien zum Testen anlegen:
# touch Pippi_Langstrumpf_in_Taka_Tuka_Land-{01..99}.mp3
. . .
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 40 / 54
Beispiel 6: Musik abspielen mit der
Kommandozeile und eigene Wiedergabelisten
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 41 / 54
Exkurs: Freie Musik im Internet
Freie Musik im Internet (kleine Auswahl):
http://www.ccc-r.de/Boycott_musicindustry
https://soundcloud.com/
https://www.medienpaedagogik-praxis.de/kostenlose-medien/
freie-musik/
...
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 42 / 54
The WIRED CD: Rip. Sample. Mash. Share.
„The WIRED CD: Rip. Sample. Mash. Share.“ => freie Musik !
URL: http://creativecommons.org/wired/
„These musicians are saying that true creativity needs to be open, fluid, and
alive. When it comes to copyright, they are pro-choice.“
„The WIRED CD“ runterladen mit wget:
# wget -r -e robots=off 
http://mirrors.creativecommons.org/ccmixter/contrib/Wired/
[...]
BEENDET --2016-04-14 12:02:00--
Verstrichene Zeit: 3m 47s
Geholt: 100 Dateien, 622M in 3m 38s (2,85 MB/s)
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 43 / 54
Musik abspielen mit der Kommandozeile
Tools (Auswahl):
cmus
cvlc
mpc
mpd
mpg123
mocp
ncmpcpp (mpd Frontend)
ncmpcppcppcpp
...
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 44 / 54
Musik abspielen mit mpg123
Musik abspielen (* ⇒ alle Dateien im aktuellen Verzeichnis; & ⇒ im
Hintergrund):
# mpg123 * &
Musik abspielen mit mpg123 (Beispiel):
# mpg123 mirrors.creativecommons.org/ccmixter/contrib/Wired/* &
[1] 11267
b1@:~/LIT_2016/music> High Performance MPEG 1.0/2.0/2.5 Audio Player
version 1.22.4; written and copyright by Michael Hipp and others
free software (LGPL) without any warranty but with best wishes
Directory: mirrors.creativecommons.org/ccmixter/contrib/Wired/
Playing MPEG stream 1 of 50: Beastie Boys - Now Get Busy.mp3 ...
MPEG 1.0 layer III, VBR, 44100 Hz joint-stereo
Title: Now Get Busy Artist: Beastie Boys
Comment:
Album: The Wired CD: Rip. Sample. Mash. Share.
Year: 2004 Genre: Hip-Hop
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 45 / 54
Musik abspielen mit der Kommandozeile:
Wiedergabelisten (Playlists) als einfache
Textdateien
einfache Textdateien sind universeller als proprietäre Playlisten
Nach- / Weiterverarbeitung mit allen Textwerkzeugen möglich
Wiedergabeliste als einfache Text-Datei, z. B. playlist-1:
lied1.mp3
/pfad/zum/lied2.mp3
/musik/noch_ein_lied.mp3
[...]
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 46 / 54
Wiedergabeliste abspielen (z. B. mit mpg123)
Playlist mit mpg123-Optionen:
# mpg123 -@ playlist-1
Option -@: ⇒ Dateinamen einlesen (hier aus der Datei
playlist; auch URL möglich!)
Option -Z: ⇒ zufällige Wiedergabe (Shuffle-Mode)
. . . oder auch als for-Schleife:
# for I in $(cat playlist-1); do mpg123 $I; done
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 47 / 54
Beispiel 7: Id-Tags von MP3s auslesen und
damit automatisch Musikdateien benennen
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 48 / 54
Id-Tags von MP3s auslesen
Tools zum Auslesen von Id-Tags (kleine Auswahl):
eyeD3
id3tool
id3info
mp3info
mid3v2 (mutagen)
. . .
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 49 / 54
Id-Tags von MP3s auslesen mit mid3v2
Id-Tags von MP3s auslesen mit mid3v2:
# mid3v2 -l ~/Musik/*.mp3
[...]
TALB=The Wired CD: Rip. Sample. Mash. Share.
TCOP=2004 David Byrne Licensed to the public under 
http://creativecommons.org/licenses/sampling+/1.0/ 
verify at http://ccmixter.org/file/Wired/61
TIT2=My Fair Lady
TPE1=David Byrne
TPUB=Creative Commons
TRCK=2
TYER=2004
Beispiel: Titel extrahieren mit grep und cut
# mid3v2 David Byrne - My Fair Lady.mp3 | grep TIT2 | 
cut -d’=’ -f 2
My Fair Lady
. . . usw. . . .
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 50 / 54
Skript: Mit Id-Tags automatisch Musikdateien
benennen
1 gewünschte Tags auslesen (z. B. auch mit awk)
2 Tags zu neuem Namen zusammensetzen
3 Dateien umbenennen
4 . . .
usw.
. . . oder ein fertiges Shell-Skript verwenden . . .
(z. B. abcde – kann Id-Tags auch aus Internet-Datenbank beziehen)
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 51 / 54
CDs auslesen mit abcde
Shell-Skript abcde („A Better CD Encoder“) = Frontend für
andere Kommandozeilen-Tools
abcde und nötige Systemkomponenten:
Grabber zum Auslesen der Musikstücke aus Audio-CDs (z. B.
cdparanoia oder cdda2wav)
Encoder zum Generieren von MP3- oder Ogg-Vorbis-Dateien
(oggenc, vorbize, lame, . . . )
CDDB-Tool (z. B. cd-discid)
Programm zum Spiegeln von Daten aus dem WWW (z. B. wget)
optional: Programm zu Setzen von ID3-Tags (z. B. id3v2)
CDs auslesen mit abcde:
# abcde
Grabbing entire CD - tracks: 01 02 03 04 05 06 07 08 09 10 11 12 13
Retrieving 1 CDDB match...done.
[...]
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 52 / 54
Ein paar Links:
1 Link zum Vortrag „Some Bashing I“ (LIT 2015):
http://www.luga.de/Angebote/Vortraege/Some_Bashing_LIT_2015
2 abcde - A Better CD Encoder:
https://abcde.einval.com
Shell-Skript, das auf der Kommandozeile CDs ausliest, die Tracks in MP3s
oder Oggs konvertiert und auf Wunsch ID3-Tags hinzufügt
3 Bash und Shellscripts:
Shell programmieren mit Bash Scripts:
http://www.strassenprogrammierer.de/
shell-programmieren-mit-bash-scripts-unter-linux_tipp_
598.html
BASH Programming - Introduction HOW-TO:
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
Advanced Bash-Scripting Guide:
http://www.tldp.org/LDP/abs/html/
B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 53 / 54
Vielen Dank für Ihre Aufmerksamkeit!
Bei weiteren Fragen wenden Sie sich bitte an info@b1-systems.de
oder +49 (0)8457 - 931096
B1 Systems GmbH - Linux/Open Source Consulting,Training, Support & Development

Weitere ähnliche Inhalte

Andere mochten auch

Entwicklungsumgebungen mit Vagrant
Entwicklungsumgebungen mit VagrantEntwicklungsumgebungen mit Vagrant
Entwicklungsumgebungen mit VagrantB1 Systems GmbH
 
SKALA DAN JARAK
SKALA DAN JARAKSKALA DAN JARAK
SKALA DAN JARAKarilmeran
 
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and SpaceSoftwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and SpaceB1 Systems GmbH
 
Bits and Bytes im Flow - Netzwerk im Wandel der Zeit
Bits and Bytes im Flow - Netzwerk im Wandel der ZeitBits and Bytes im Flow - Netzwerk im Wandel der Zeit
Bits and Bytes im Flow - Netzwerk im Wandel der ZeitB1 Systems GmbH
 
Cohousing Projects Algemene Vergadering 2015
Cohousing Projects Algemene Vergadering 2015Cohousing Projects Algemene Vergadering 2015
Cohousing Projects Algemene Vergadering 2015Federico Bisschop
 
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and SpaceSoftwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and SpaceB1 Systems GmbH
 
Ubuntu-/Debian-Packaging
Ubuntu-/Debian-PackagingUbuntu-/Debian-Packaging
Ubuntu-/Debian-PackagingB1 Systems GmbH
 
End of the Road - Facing Current Scaling Limits within OpenStack
End of the Road - Facing Current Scaling Limits within OpenStackEnd of the Road - Facing Current Scaling Limits within OpenStack
End of the Road - Facing Current Scaling Limits within OpenStackB1 Systems GmbH
 
Btrfs - das Dateisystem der Zukunft?
Btrfs - das Dateisystem der Zukunft?Btrfs - das Dateisystem der Zukunft?
Btrfs - das Dateisystem der Zukunft?B1 Systems GmbH
 
Mihreteab w gebriel seminar
Mihreteab w gebriel seminarMihreteab w gebriel seminar
Mihreteab w gebriel seminarMihreteab F
 
Configuración del directorio activo
Configuración del directorio activoConfiguración del directorio activo
Configuración del directorio activoYadira18
 
OpenStack und Heat - Standardisierte Test- und Entwicklungsumgebungen
OpenStack und Heat - Standardisierte Test- und EntwicklungsumgebungenOpenStack und Heat - Standardisierte Test- und Entwicklungsumgebungen
OpenStack und Heat - Standardisierte Test- und EntwicklungsumgebungenB1 Systems GmbH
 
Android mit Google Befreiung, PlayStore Apps im eigenen Repo
Android mit Google Befreiung, PlayStore Apps im eigenen RepoAndroid mit Google Befreiung, PlayStore Apps im eigenen Repo
Android mit Google Befreiung, PlayStore Apps im eigenen RepoB1 Systems GmbH
 
Hmss2011 brochure
Hmss2011 brochureHmss2011 brochure
Hmss2011 brochurerajmayukh
 

Andere mochten auch (20)

Entwicklungsumgebungen mit Vagrant
Entwicklungsumgebungen mit VagrantEntwicklungsumgebungen mit Vagrant
Entwicklungsumgebungen mit Vagrant
 
CMMI
CMMICMMI
CMMI
 
SKALA DAN JARAK
SKALA DAN JARAKSKALA DAN JARAK
SKALA DAN JARAK
 
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and SpaceSoftwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
 
systemd im Alltag
systemd im Alltagsystemd im Alltag
systemd im Alltag
 
Bits and Bytes im Flow - Netzwerk im Wandel der Zeit
Bits and Bytes im Flow - Netzwerk im Wandel der ZeitBits and Bytes im Flow - Netzwerk im Wandel der Zeit
Bits and Bytes im Flow - Netzwerk im Wandel der Zeit
 
Cohousing Projects Algemene Vergadering 2015
Cohousing Projects Algemene Vergadering 2015Cohousing Projects Algemene Vergadering 2015
Cohousing Projects Algemene Vergadering 2015
 
Mercados
MercadosMercados
Mercados
 
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and SpaceSoftwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
 
Bykowski poshuk20110526
Bykowski poshuk20110526Bykowski poshuk20110526
Bykowski poshuk20110526
 
Ubuntu-/Debian-Packaging
Ubuntu-/Debian-PackagingUbuntu-/Debian-Packaging
Ubuntu-/Debian-Packaging
 
End of the Road - Facing Current Scaling Limits within OpenStack
End of the Road - Facing Current Scaling Limits within OpenStackEnd of the Road - Facing Current Scaling Limits within OpenStack
End of the Road - Facing Current Scaling Limits within OpenStack
 
Cmmi real
Cmmi realCmmi real
Cmmi real
 
Btrfs - das Dateisystem der Zukunft?
Btrfs - das Dateisystem der Zukunft?Btrfs - das Dateisystem der Zukunft?
Btrfs - das Dateisystem der Zukunft?
 
Mihreteab w gebriel seminar
Mihreteab w gebriel seminarMihreteab w gebriel seminar
Mihreteab w gebriel seminar
 
Configuración del directorio activo
Configuración del directorio activoConfiguración del directorio activo
Configuración del directorio activo
 
OpenStack und Heat - Standardisierte Test- und Entwicklungsumgebungen
OpenStack und Heat - Standardisierte Test- und EntwicklungsumgebungenOpenStack und Heat - Standardisierte Test- und Entwicklungsumgebungen
OpenStack und Heat - Standardisierte Test- und Entwicklungsumgebungen
 
Practicas
PracticasPracticas
Practicas
 
Android mit Google Befreiung, PlayStore Apps im eigenen Repo
Android mit Google Befreiung, PlayStore Apps im eigenen RepoAndroid mit Google Befreiung, PlayStore Apps im eigenen Repo
Android mit Google Befreiung, PlayStore Apps im eigenen Repo
 
Hmss2011 brochure
Hmss2011 brochureHmss2011 brochure
Hmss2011 brochure
 

Ähnlich wie Some Bashing II - Mit der Kommandozeile Abläufe automatisieren

OSMC 2012 | Automatische Konfiguration von Nagios/Icinga mit Agordamon by Chr...
OSMC 2012 | Automatische Konfiguration von Nagios/Icinga mit Agordamon by Chr...OSMC 2012 | Automatische Konfiguration von Nagios/Icinga mit Agordamon by Chr...
OSMC 2012 | Automatische Konfiguration von Nagios/Icinga mit Agordamon by Chr...NETWAYS
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerB1 Systems GmbH
 
System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet B1 Systems GmbH
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsOSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsNETWAYS
 
Linuxtools fuer Developer
Linuxtools fuer DeveloperLinuxtools fuer Developer
Linuxtools fuer DeveloperMayflower GmbH
 
Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanB1 Systems GmbH
 
Drupal 7 Einblick und Ausblick
Drupal 7 Einblick und AusblickDrupal 7 Einblick und Ausblick
Drupal 7 Einblick und AusblickAmazee Labs
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for BeginnersUlrich Krause
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018Christian Mücke
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17remigius-stalder
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & DominoUlrich Krause
 
MongoDB - Big Data mit Open Source
MongoDB - Big Data mit Open SourceMongoDB - Big Data mit Open Source
MongoDB - Big Data mit Open SourceB1 Systems GmbH
 
Compact, Compress, De-DUplicate
Compact, Compress, De-DUplicateCompact, Compress, De-DUplicate
Compact, Compress, De-DUplicateUlrich Krause
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenChristian Münch
 
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeOSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeNETWAYS
 
SLAC 2008 RPMs selber bauen
SLAC 2008 RPMs selber bauenSLAC 2008 RPMs selber bauen
SLAC 2008 RPMs selber bauenSchlomo Schapiro
 

Ähnlich wie Some Bashing II - Mit der Kommandozeile Abläufe automatisieren (20)

OSMC 2012 | Automatische Konfiguration von Nagios/Icinga mit Agordamon by Chr...
OSMC 2012 | Automatische Konfiguration von Nagios/Icinga mit Agordamon by Chr...OSMC 2012 | Automatische Konfiguration von Nagios/Icinga mit Agordamon by Chr...
OSMC 2012 | Automatische Konfiguration von Nagios/Icinga mit Agordamon by Chr...
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit Docker
 
System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsOSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Linuxtools fuer Developer
Linuxtools fuer DeveloperLinuxtools fuer Developer
Linuxtools fuer Developer
 
Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und Foreman
 
Drupal 7 Einblick und Ausblick
Drupal 7 Einblick und AusblickDrupal 7 Einblick und Ausblick
Drupal 7 Einblick und Ausblick
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & Domino
 
MongoDB - Big Data mit Open Source
MongoDB - Big Data mit Open SourceMongoDB - Big Data mit Open Source
MongoDB - Big Data mit Open Source
 
Compact, Compress, De-DUplicate
Compact, Compress, De-DUplicateCompact, Compress, De-DUplicate
Compact, Compress, De-DUplicate
 
yeoman
yeoman yeoman
yeoman
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisieren
 
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeOSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
 
SLAC 2008 RPMs selber bauen
SLAC 2008 RPMs selber bauenSLAC 2008 RPMs selber bauen
SLAC 2008 RPMs selber bauen
 
C++ kompakt
C++ kompaktC++ kompakt
C++ kompakt
 

Mehr von B1 Systems GmbH

Ubuntu-Server als Backup- und Fileserver betreiben
Ubuntu-Server als Backup- und Fileserver betreibenUbuntu-Server als Backup- und Fileserver betreiben
Ubuntu-Server als Backup- und Fileserver betreibenB1 Systems GmbH
 
Ambilight, Raspberry Pi, Ubuntu & Hyperion
Ambilight, Raspberry Pi, Ubuntu & HyperionAmbilight, Raspberry Pi, Ubuntu & Hyperion
Ambilight, Raspberry Pi, Ubuntu & HyperionB1 Systems GmbH
 
B1 Thin Client Management bei der Fraport AG
B1 Thin Client Management bei der Fraport AGB1 Thin Client Management bei der Fraport AG
B1 Thin Client Management bei der Fraport AGB1 Systems GmbH
 
Salt - A Scalable Systems Management Solution for Datacenters
Salt - A Scalable Systems Management Solution for DatacentersSalt - A Scalable Systems Management Solution for Datacenters
Salt - A Scalable Systems Management Solution for DatacentersB1 Systems GmbH
 
Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanB1 Systems GmbH
 
Simplify and run your development environments with Vagrant on OpenStack
Simplify and run your development environments with Vagrant on OpenStackSimplify and run your development environments with Vagrant on OpenStack
Simplify and run your development environments with Vagrant on OpenStackB1 Systems GmbH
 
Simplify and run your development environments with Vagrant on OpenStack
Simplify and run your development environments with Vagrant on OpenStackSimplify and run your development environments with Vagrant on OpenStack
Simplify and run your development environments with Vagrant on OpenStackB1 Systems GmbH
 
E-Mail-Verschlüsselung mit GnuPG
E-Mail-Verschlüsselung mit GnuPGE-Mail-Verschlüsselung mit GnuPG
E-Mail-Verschlüsselung mit GnuPGB1 Systems GmbH
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...B1 Systems GmbH
 
OpenStack Betrieb & Support - 5 Jahre OpenStack Managed Service bei der SAP SE
OpenStack Betrieb & Support - 5 Jahre OpenStack Managed Service bei der SAP SEOpenStack Betrieb & Support - 5 Jahre OpenStack Managed Service bei der SAP SE
OpenStack Betrieb & Support - 5 Jahre OpenStack Managed Service bei der SAP SEB1 Systems GmbH
 
Ceph - Software Defined Storage für die Cloud
Ceph - Software Defined Storage für die CloudCeph - Software Defined Storage für die Cloud
Ceph - Software Defined Storage für die CloudB1 Systems GmbH
 
Migrating deployment processes and Continuous Integration at SAP SE
Migrating deployment processes and Continuous Integration at SAP SEMigrating deployment processes and Continuous Integration at SAP SE
Migrating deployment processes and Continuous Integration at SAP SEB1 Systems GmbH
 
Klein, aber oho - Continuous Delivery von Micro Applications mit Jenkins, Doc...
Klein, aber oho - Continuous Delivery von Micro Applications mit Jenkins, Doc...Klein, aber oho - Continuous Delivery von Micro Applications mit Jenkins, Doc...
Klein, aber oho - Continuous Delivery von Micro Applications mit Jenkins, Doc...B1 Systems GmbH
 
Lifecycle Management mit Puppet und Foreman
Lifecycle Management mit Puppet und ForemanLifecycle Management mit Puppet und Foreman
Lifecycle Management mit Puppet und ForemanB1 Systems GmbH
 
DevOps environment with OpenStack and NetApp
DevOps environment with OpenStack and NetAppDevOps environment with OpenStack and NetApp
DevOps environment with OpenStack and NetAppB1 Systems GmbH
 
Images for the Clouds with KIWI & OBS
Images for the Clouds with KIWI & OBSImages for the Clouds with KIWI & OBS
Images for the Clouds with KIWI & OBSB1 Systems GmbH
 
OpenStack und Heat - Standardisierte Test- und Entwicklungsumgebungen
OpenStack und Heat - Standardisierte Test- und EntwicklungsumgebungenOpenStack und Heat - Standardisierte Test- und Entwicklungsumgebungen
OpenStack und Heat - Standardisierte Test- und EntwicklungsumgebungenB1 Systems GmbH
 

Mehr von B1 Systems GmbH (17)

Ubuntu-Server als Backup- und Fileserver betreiben
Ubuntu-Server als Backup- und Fileserver betreibenUbuntu-Server als Backup- und Fileserver betreiben
Ubuntu-Server als Backup- und Fileserver betreiben
 
Ambilight, Raspberry Pi, Ubuntu & Hyperion
Ambilight, Raspberry Pi, Ubuntu & HyperionAmbilight, Raspberry Pi, Ubuntu & Hyperion
Ambilight, Raspberry Pi, Ubuntu & Hyperion
 
B1 Thin Client Management bei der Fraport AG
B1 Thin Client Management bei der Fraport AGB1 Thin Client Management bei der Fraport AG
B1 Thin Client Management bei der Fraport AG
 
Salt - A Scalable Systems Management Solution for Datacenters
Salt - A Scalable Systems Management Solution for DatacentersSalt - A Scalable Systems Management Solution for Datacenters
Salt - A Scalable Systems Management Solution for Datacenters
 
Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und Foreman
 
Simplify and run your development environments with Vagrant on OpenStack
Simplify and run your development environments with Vagrant on OpenStackSimplify and run your development environments with Vagrant on OpenStack
Simplify and run your development environments with Vagrant on OpenStack
 
Simplify and run your development environments with Vagrant on OpenStack
Simplify and run your development environments with Vagrant on OpenStackSimplify and run your development environments with Vagrant on OpenStack
Simplify and run your development environments with Vagrant on OpenStack
 
E-Mail-Verschlüsselung mit GnuPG
E-Mail-Verschlüsselung mit GnuPGE-Mail-Verschlüsselung mit GnuPG
E-Mail-Verschlüsselung mit GnuPG
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
 
OpenStack Betrieb & Support - 5 Jahre OpenStack Managed Service bei der SAP SE
OpenStack Betrieb & Support - 5 Jahre OpenStack Managed Service bei der SAP SEOpenStack Betrieb & Support - 5 Jahre OpenStack Managed Service bei der SAP SE
OpenStack Betrieb & Support - 5 Jahre OpenStack Managed Service bei der SAP SE
 
Ceph - Software Defined Storage für die Cloud
Ceph - Software Defined Storage für die CloudCeph - Software Defined Storage für die Cloud
Ceph - Software Defined Storage für die Cloud
 
Migrating deployment processes and Continuous Integration at SAP SE
Migrating deployment processes and Continuous Integration at SAP SEMigrating deployment processes and Continuous Integration at SAP SE
Migrating deployment processes and Continuous Integration at SAP SE
 
Klein, aber oho - Continuous Delivery von Micro Applications mit Jenkins, Doc...
Klein, aber oho - Continuous Delivery von Micro Applications mit Jenkins, Doc...Klein, aber oho - Continuous Delivery von Micro Applications mit Jenkins, Doc...
Klein, aber oho - Continuous Delivery von Micro Applications mit Jenkins, Doc...
 
Lifecycle Management mit Puppet und Foreman
Lifecycle Management mit Puppet und ForemanLifecycle Management mit Puppet und Foreman
Lifecycle Management mit Puppet und Foreman
 
DevOps environment with OpenStack and NetApp
DevOps environment with OpenStack and NetAppDevOps environment with OpenStack and NetApp
DevOps environment with OpenStack and NetApp
 
Images for the Clouds with KIWI & OBS
Images for the Clouds with KIWI & OBSImages for the Clouds with KIWI & OBS
Images for the Clouds with KIWI & OBS
 
OpenStack und Heat - Standardisierte Test- und Entwicklungsumgebungen
OpenStack und Heat - Standardisierte Test- und EntwicklungsumgebungenOpenStack und Heat - Standardisierte Test- und Entwicklungsumgebungen
OpenStack und Heat - Standardisierte Test- und Entwicklungsumgebungen
 

Some Bashing II - Mit der Kommandozeile Abläufe automatisieren

  • 1. Some Bashing II - Mit der Kommandozeile Abläufe automatisieren Linux-Infotag Augsburg 16. April 2016 Andreas Steil Linux Consultant & Trainer B1 Systems GmbH steil@b1-systems.de B1 Systems GmbH - Linux/Open Source Consulting,Training, Support & Development
  • 2. Some Bashing II: Mit der Kommandozeile Abläufe automatisieren (Workshop-Unterlagen) B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 2 / 54
  • 3. Agenda (Beispiele) Paar Grundlagen: Bash Shellscripts Aufbau Anwendung Automatisierung Beispiele: 1 Bilder automatisch umwandeln/verkleinern 2 PDFs (z.B. aus Scans) zusammenführen 3 Umlaute in HTML-Code konvertieren 4 Konfigurationsdateien bereinigen 5 Dateien automatisch umbenennen 6 Musik abspielen mit der Kommandozeile mit eigenen Wiedergabelisten 7 Id-Tags von MP3s auslesen und damit automatisch Musikdateien benennen 8 . . . B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 3 / 54
  • 4. Beispiel 1: Bilder automatisch umwandeln/verkleinern B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 4 / 54
  • 5. Bilder verkleinern: Ein (un)beholfener Weg „Es ist eine Krux mit den PDF-Dateien: Wer sie selbst erstellt – etwa beim Scannen – findet schnell heraus, dass die Dateigröße enorm ist. Wer Online-Bewerbungsmappen oder andere Dokumente per E-Mail verschicken will, stößt dabei schnell an die Grenzen gängiger Mailanbieter, zumal große E-Mails in vielen Unternehmen geblockt werden. Mit dem Online-Service SmallPDF gehört dieses Problem der Vergangenheit an: Das Online-Tool kann PDF-Dateien ganz eingach komprimieren, egal ob unter Windows, Mac OS X oder Linux. Alles, was Ihr dazu braucht, ist ein Browser – und ein wenig Upload-Bandbreite.“ Quelle: http: //www.tutonaut.de/tipp-pdf-dateien-schnell-und-einfach-auf-allen-systemen-verkleinern.html Problem: „Natürlich gibt es bei der Nutzung von Onlinediensten dieser Art ein gewisses Risiko, dass die Daten von Dritten eingesehen werden. Der Dienst schrumpft die PDF-Dateien und verspricht, diese anschließend – im Stundentakt – vom Server zu löschen. ...“ Lösung: Kommandozeilenprogramm convert (Paket „ImageMagick“) => kein Risiko mit der Bash . . . B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 5 / 54
  • 6. Bilder konvertieren mit convert (Beispiele) convert ⇒ Paket „ImageMagick“ (http://www.imagemagick.org/script/convert.php) Bild in anderes Format konvertieren (im Beispiel ins PDF-Format): # convert scan.jpg scan.pdf Mini-Ansicht erstellen (im Beispiel 120x120 Pixel): # convert -size 120x120 GroßesBild.tiff -resize 120x120 thumbnail.png Bild verkleinern (im Beispiel auf 50%): # convert bild.jpg -resize 50% bild.png Bildgröße verändern (im Beispiel auf 768x1024 Pixel): # convert -resize 768x1024 scan.jpg B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 6 / 54
  • 7. Umwandeln eines kompletten Verzeichnisses Umwandeln eines kompletten Verzeichnisses: for BILD in *.jpg; do convert -resize 800x600 $BILD ./kleiner/$BILD; done *.jpg gibt das Format der Bilder an (alle gängigen Bildformate möglich) -resize 800x600 gibt die neue Größe der Bilder an neue Bilder werden in (vorhandenem) Unterordner ./kleiner gespeichert (Der kennzeichnet einen Zeilenumbruch – wegen der übersichtlicheren Darstellung.) B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 7 / 54
  • 8. Beispiel 2: PDFs (z.B. aus Scans) zusammenführen B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 8 / 54
  • 9. PDFs zusammenführen mit pdftk Dokumentationen Bewerbungen Hausarbeiten Scans . . . Erst alles ins gleiche Format überführen (im Beispiel PDF): # convert Zeugnis_1.jpg Zeugnis_1.pdf . . . dann zusammenführen: # pdftk Anschreiben.pdf Lebenslauf.pdf Zeugnis_1.pdf cat output Bewerbung.pdf . . . oder: # pdftk Hausarbeit.pdf Eigenständigkeitserklärung.pdf cat output Hausarbeit_John_Doe.pdf B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 9 / 54
  • 10. Skripte (sehr einfache Einführung) Skript = Befehle in Textdatei zum wiederholten Aufrufen Skript ausführbar machen: chmod +x <skriptname> Skript aufrufen: <skriptname> (/bin/bash <skriptname>) bei Bash-Skripten erste Zeile #! /bin/bash (Shebang-Anweisung) ⇒ ausführender Kommandointerpreter Einfaches, aber freundliches Skript erstellen (Beispiel): $ echo Hallo Du da! > hallo.sh Skript ausführbar machen: $ chmod +x hallo.sh Skript aufrufen/ausführen: $ hallo.sh Hallo Du da! B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 10 / 54
  • 11. Skript zum Zusammenführen von PDFs mit for-Schleife Skript zum PDFs zusammenführen: #! /bin/bash convert ~/LIT_2016/book/cover.jpg ~/LIT_2016/gesamt/gesamt.pdf for i in $(ls ~/LIT_2016/book) do echo $i wird verarbeitet ... convert ~/LIT_2016/book/$i ~/LIT_2016/gesamt/$i.pdf pdftk ~/LIT_2016/gesamt/gesamt.pdf ~/LIT_2016/gesamt/$i.pdf cat output ~/LIT_2016/gesamt/gesamt_1.pdf mv ~/LIT_2016/gesamt/gesamt_1.pdf ~/LIT_2016/gesamt/gesamt.pdf done echo Ich habe fertig! okular ~/LIT_2016/gesamt/gesamt.pdf & B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 11 / 54
  • 12. Bequemer & übersichtlicher: Suchpfad in eigenes Skriptverzeichnis In der Umgebungsvariablen PATH sind Verzeichnisse als (Such-)Pfade für Befehle (auch Skripte) definiert. kann neu definiert und dadurch erweitert/geändert werden (Trennzeichen: :) Pfadangabe zum Skript kann so beim Aufruf erspart werden. dauerhaftes Ändern der Umgebungsvariable PATH z. B. im Anmeldeskript des Users /.bashrc Umgebungsvariable PATH abfragen: $ echo $PATH /home/<user>/bin:/usr/local/bin:/usr/bin:/bin Umgebungsvariable PATH um Verzeichnis erweitern (temporär): $ PATH=$PATH:/home/b1/LIT_2016/scripte B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 12 / 54
  • 13. Beispiel 3: Umlaute in HTML-Code konvertieren B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 13 / 54
  • 14. Vorspann: etwas sed sed = Stream Editor Syntax: z. B. sed ’s/regexp/replacement/’ ... hilfreiche Befehle/Optionen: s ersetzen (substitute) g jedes (nicht nur erstes) Vorkommen (global) -e Verknüpfung mehrerer Editierbefehle (z. B. sed -e ’<befehl1>’ -e ’<befehl2>’; ⇒ Besipiel 5) -f Anwendung auf angegebene Datei statt Stream (file) Anwendung (Beispiel): # echo abc | sed ’s/abc/yxz/’ yxz B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 14 / 54
  • 15. sed – Editierbefehle Einige Editierbefehle von sed Befehl Funktion a Einfügen nach der aktuellen Zeile i Einfügen vor der aktuellen Zeile d Löschen p Ausgeben c Zeilen ersetzen s Suchen und Ersetzen y Zeichen durch andere Zeichen ersetzen B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 15 / 54
  • 16. Suchen und Ersetzen mit sed eine der wichtigsten Funktionen von sed: Suchen & Ersetzen Suchbegriff meist regulärer Ausdruck nur erstes Vorkommen pro Zeile wird ersetzt, es sei denn, Sie verwenden Parameter g (global) Erstes Vorkommen pro Zeile wird ersetzt $ sed ’s/Latex/LaTeX/’ datei Alle Vorkommen werden ersetzt $ sed ’s/Latex/LaTeX/g’ datei B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 16 / 54
  • 17. Anwendung von sed – Beispiele Beispiel: Zeile 12 bis Ende der Datei löschen $ sed ’12,$d’ datei Beispiel: Zeile 5 durch „lalala“ ersetzen $ sed ’5c lalala’ datei Bestimmte Buchstaben ersetzen $ echo "P1 Sysdems" | sed -e ’y/Pd/Bt/’ (Konfigurations-)Dateien suchen und Kommentare entfernen # find /<pfad>/ -type f -iname "*.conf" -exec sed -i ’/^#/d’ ’{}’ ; B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 17 / 54
  • 18. Umlaute in HTML-Code konvertieren mit sed Anwendung von sed (ein Buchstabe): # echo Örömüz Ürgümül! > umlaute.html # sed ’s/ü/&uuml;/g’ umlaute.html Öröm&uuml;z Ürg&uuml;m&uuml;l! Anwendung von sed (mehrere Buchstaben): # sed -e ’s/Ö/&Ouuml;/g’ -e ’s/ö/&ouml;/g’ -e ’s/Ü/&Uuml;/g’ -e ’s/ü/&uuml;/g’ [...] umlaute.txt &Ouuml;r&ouml;m&uuml;z &Uuml;rg&uuml;m&uuml;l! B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 18 / 54
  • 19. . . . einfacher per Skript, gespeist aus Sed-File: Sed-File (z.B. ersetzungen): s/ä/&auml;/g s/ö/&ouml;/g ... Skript (z.B. ersetze) für Sed-File (mit Sicherungskopie): for i in $* do cp $i $i.bak sed -f ./ersetzungen < $i.bak > $i done echo "Ich habe fertig !" Anwendung: # ersetze umlaute.html Ich habe fertig ! B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 19 / 54
  • 20. Das Ganze auf einem anderen Rechner . . . (via ssh): Skript (z.B. umls_auf): #! /bin/bash read -p "Host: " HOST read -p "User: " USER read -s -p "Passwort:" PW read -p "Datei: " DATEI sshpass -p $PW ssh $USER@$HOST -t "sh /pfad/zum/skript/ersetze $DATEI" Skript ausführen: $ umls_auf Host: 8.8.8.8 User: webling Passwort: Connection to 8.8.8.8 closed. B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 20 / 54
  • 21. Beispiel 4: Konfigurationsdateien bereinigen B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 21 / 54
  • 22. Zeichenketten ermitteln mit grep grep = global regular expression print Syntax: z. B. grep [OPTIONS] PATTERN [FILE...] hilfreiche Befehle/Optionen: -R auch Unterverzeichnisse durchsuchen (recursive) -i Groß- und Kleinbuchstaben nicht unterscheiden (ignore) -v alle Zeilen ausgeben, in denen der reguläre Ausdruck nicht erfüllt ist Anwendung (Beispiel): ’sepp mit grep’: # grep -iR sepp namen.txt:sepp ⇒ in der Datei namen.txt gibt’s einen Treffer für sepp B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 22 / 54
  • 23. Kommentare entfernen mit grep Kommentarzeilen entfernen mit grep (Beispiel; Ausgabe auf Bildschirm): # grep ^[^#] /etc/xinetd.conf defaults { log_type = SYSLOG daemon info log_on_failure = HOST ATTEMPT log_on_success = HOST EXIT DURATION [...] groups = yes umask = 002 } includedir /etc/xinetd.d ⇒ Standardausgabe (^ = am Anfang; regulärer Ausdruck in [...], hier: [^#] = nicht Kommentarzeichen; ⇒ alle Zeilen, bei denen am Anfang nicht ein Kommantarzeichen steht) B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 23 / 54
  • 24. Kommentare entfernen mit grep (in Datei) . . . als interaktives Skript (Ausgabe in Datei): #! /bin/bash echo "Dateinamen eingeben:" read DATEI cp $DATEI $DATEI.orig grep ^[^#] $DATEI.orig > $DATEI echo Kommentarzeilen in Datei $DATEI wurden entfernt, das Original als $DATEI.orig gesichert. ⇒ Ausgabe in Datei (read DATEI erwartet Benutzereingabe, die in der Variablen $DATEI gespeichert wird.) B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 24 / 54
  • 25. Dateien suchen mit find z. B. alle Dateien mit der Endung .conf in /etc suchen: # find /etc -name *.conf B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 25 / 54
  • 26. . . . beides zusammen als Skript: (für ein bestimmtes Verzeichnis) Skript für das Verzeichnis /etc: #! /bin/bash for DATEI in ‘find /etc -name "*.conf"‘ do echo Datei $DATEI gefunden ... cp $DATEI $DATEI.orig grep ^[^#] $DATEI.orig > $DATEI echo Kommentarzeilen in Datei $DATEI wurden entfernt, das Original als $DATEI.orig gesichert. done Wichtiger Hinweis: Nur als Beispiel gedacht! (Nicht zweimal ausführen, sonst werden die Sicherungen (*.conf.orig) mit der kommentarlosen Version überschrieben.) B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 26 / 54
  • 27. . . . beides zusammen als Skript: (Version 2: interaktiv mit Benutzereingabe) Interaktives Skript (Benutzereingabe mit read): #! /bin/bash echo "Bitte Verzeichnis angeben: "; read VERZEICHNIS for DATEI in $(find $VERZEICHNIS -name "*.conf") do echo Datei $DATEI gefunden ... cp $DATEI $DATEI.orig grep ^[^#] $DATEI.orig > $DATEI echo Kommentarzeilen in Datei $DATEI wurden entfernt, das Original als $DATEI.orig gesichert. done Wichtiger Hinweis: Nur als Beispiel gedacht! (Nicht zweimal ausführen, sonst werden die Sicherungen (*.conf.orig) mit der kommentarlosen Version überschrieben.) B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 27 / 54
  • 28. . . . beides zusammen als Skript: (Version 3: mit Parameterübergabe) Skript mit Parameterübergabe ($1 = 1.Parameter): #! /bin/bash for DATEI in ‘find $1 -name "*.conf"‘ do echo Datei $DATEI in Verzeichnis $1 gefunden ... cp $DATEI $DATEI.orig grep ^[^#] $DATEI.orig > $DATEI echo Kommentarzeilen in Datei $DATEI wurden entfernt, das Original als $DATEI.orig gesichert. done Wichtiger Hinweis: Nur als Beispiel gedacht! (Nicht zweimal ausführen, sonst werden die Sicherungen (*.conf.orig) mit der kommentarlosen Version überschrieben.) B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 28 / 54
  • 29. Beispiel 5: Dateien automatisch umbenennen B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 29 / 54
  • 30. Problem: Leerzeichen in Datei- und Verzeichnisnamen Problem: Leerzeichen in Datei- und Verzeichnisnamen Leerzeichen ⇒ Metazeichen mit Sonderbedeutung werden oft anders interpretiert (z. B. als Trennzeichen in der Bash) müssen maskiert werden (z. B. mit Backslash in der Bash) oft unübersichtlich . . . Beispiel: Datei mit Leerzeichen (maskiert mit Backslash) anlegen: # touch la la la # ls la la la B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 30 / 54
  • 31. Leerzeichen in Texten durch Unterstrich ersetzen Leerzeichen durch Unterstrich ersetzen mit tr: # echo "la la laa" | tr -s ’ ’ ’_’ la_la_laa Option -s (--squeeze-repeats) ⇒ Wiederholungen von Zeichen werden als ein Zeichen gewertet Leerzeichen durch Unterstrich ersetzen mit sed: # echo "la la la" | sed -e ’s/ */_/g’ la_la_la * ⇒ Leerzeichen, beliebig oft g (global) ⇒ für alle Vorkommen ⇒ nächster Schritt: für Datei- und Verzeichnisnamen B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 31 / 54
  • 32. Lösung 1: Parameterexpansion der Bash Leerzeichen durch Unterstrich ersetzen mit Parameterexpansion: # for DATEI in ./*; do mv "$DATEI" "${DATEI// /_}" done ${DATEI } ⇒ weist die Bash an, den Inhalt der Variable $DATEI zu expandieren der / ist der Operator für Suchen und Ersetzen ⇒ ${VarName/A/B} ersetzt das erste Vorkommen von A im Inhalt von $VarName durch B ${VarName//A/B} ersetzt alle As durch Bs B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 32 / 54
  • 33. Lösung 2: Skript mit sed Leerzeichen durch Unterstrich ersetzen mit sed (als Skript): DIR=$1 for i in $DIR/* do ALTER_NAME=$i NEUER_NAME=‘echo $i | sed ’s/ /_/g’‘ mv $ALTER_NAME $NEUER_NAME echo $ALTER_NAME wurde in $NEUER_NAME umbenannt. done $1 ⇒ 1.Parameter wird übernommen (/pfad/zum/verzeichnis) Aufruf: # /pfad/zum/script /pfad/zum/verzeichnis verzeichnis/la la la wurde in verzeichnis/la_la_la umbenannt. . . . noch schöner machen . . . B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 33 / 54
  • 34. Lösung 2: Skript ausbauen . . . Skript ausbauen: für Dateien und Verzeichnisse auch für mehrere Parameter rekursive Wirksamkeit Prüfen auf bereits vorhandene Dateien und Verzeichnisse Hilfe-Funktion Formales: Shebang-Anweisung, Beschreibung, Autor, . . . . . . B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 34 / 54
  • 35. Leerzeichen durch _ ersetzen: Ein perfektes Skript-Beispiel 1/2 . . . als vorbildliches Skript von Anke Börnig (Teil 1/2): #!/bin/bash # Dieses Skript sucht in den angegebenen Verzeichnissen zuerst nach Unter-Verzeichnissen, # die ein Leerzeichen im Namen haben, und ersetzt die Leerzeichen durch "_". # Anschliessend passiert das gleiche fuer Dateinamen. # Autor: Anke Boernig, anke@boernig.de # Datum: 29.05.02 SCRIPTNAME=‘basename $0‘ # Hilfefunktion fuer Hilfetext hilfe () { cat << EOF Benutzung: $SCRIPTNAME Verzeichnis1 [Verzeichnis2 ...] Das Skript $SCRIPTNAME wandelt alle Leerzeichen innerhalb von Verzeichnis- und Dateinamen in den angegebenen Verzeichnissen in "_" um. EOF } if [ "$#" -lt 1 ] then hilfe exit 0 fi B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 35 / 54
  • 36. Leerzeichen durch _ ersetzen: Ein perfektes Skript-Beispiel 2/2 . . . als vorbildliches Skript von Anke Börnig (Teil 2/2): for VERZ in $@ do for TYP in d f do while ORIG=$(find $VERZ -type $TYP -name "* *" | head -n1 | grep ’.* .*’) do NEU=$(echo $ORIG | sed ’s/ /_/g’) while test -e $NEU do PFAD=${NEU%/*} echo "Ein(e) Verzeichnis/Datei $NEU existiert schon." echo "Bitte einen anderen Namen eingeben:" read NAME NEU=$PFAD/$NAME done echo "$ORIG wird umbenannt nach $NEU." mv "$ORIG" "$NEU" done done done B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 36 / 54
  • 37. Problem: sehr viele Dateien umbenennen Problem: sehr viele MP3s umbenennen, die Namen haben wie Pippi_Langstrumpf_in_Taka_Tuka_Land-01.mp3 bis Pippi_Langstrumpf_in_Taka_Tuka_Land-23.mp3 „Da die blöden MP3-Player meiner Kinder aber zu doof sind, so lange Dateinamen auszuwerten, und dadurch die Reihenfolge immer durcheinander ist, müsste ich ein paar Hundert Dateien umbenennen, so dass die Zahlen vorne stehen, also z. B. Pippi_Langstrumpf_in_Taka_Tuka_Land-01.mp3 -> 01-Pippi_Langstrumpf_in_Taka_Tuka_Land.mp3 bis Pippi_Langstrumpf_in_Taka_Tuka_Land-23.mp3 -> 23-Pippi_Langstrumpf_in_Taka_Tuka_Land.mp3“ B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 37 / 54
  • 38. Lösung: sed Dateien automatisch umbenennen (for-Schleife mit mv und sed): # for i in $(ls *.mp3); do mv $i $(echo $i | sed -e ’s/([a-z,A-Z,_]{0,})-([0-9]{0,}).mp3/2-1.mp3/’); done . . . etwas aufgedröselt (in Skript-Form): #! /bin/bash # for-Schleife: für alle MP3s # (ls-Befehl könnte auch mit Verzeichnisangabe erfolgen) for i in $(ls *.mp3) # innerhalb der for-Schleife: Umbenennen mit ’mv’, # wobei $i = alter Name, $(echo ...) = neuer Name do mv $i $(echo $i | sed -e ’s/([a-z,A-Z,_]{0,})-([0-9]{0,}).mp3/2-1.mp3/’) done B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 38 / 54
  • 39. sed-Ausdruck (etwas entwirrt) Der sed-Ausdruck: sed -e ’s/([a-z,A-Z,_]{0,})-([0-9]{0,}).mp3/2-1.mp3/’) Ersetze Dateinamen (s = substitute): [a-z,A-Z,_]{0,})-([0-9]{0,}).mp3 ⇒ erst alles bis zum Bindestrich (= alle Buchstaben einschl. Unterstrich) als 1.Teil abtrennen (⇒ 1); nachfolgende Nummerierung wird 2.Teil (⇒ 2) . . . mit: 2-1.mp3 ⇒ der zweite Teil (2) von oben (= Nummer) wird – durch Bindestrich getrennt – nach vorne (= vor den ersten Teil 1) gestellt B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 39 / 54
  • 40. Zum Nachmachen 100 Fake-Dateien zum Testen anlegen: # touch Pippi_Langstrumpf_in_Taka_Tuka_Land-{01..99}.mp3 . . . B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 40 / 54
  • 41. Beispiel 6: Musik abspielen mit der Kommandozeile und eigene Wiedergabelisten B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 41 / 54
  • 42. Exkurs: Freie Musik im Internet Freie Musik im Internet (kleine Auswahl): http://www.ccc-r.de/Boycott_musicindustry https://soundcloud.com/ https://www.medienpaedagogik-praxis.de/kostenlose-medien/ freie-musik/ ... B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 42 / 54
  • 43. The WIRED CD: Rip. Sample. Mash. Share. „The WIRED CD: Rip. Sample. Mash. Share.“ => freie Musik ! URL: http://creativecommons.org/wired/ „These musicians are saying that true creativity needs to be open, fluid, and alive. When it comes to copyright, they are pro-choice.“ „The WIRED CD“ runterladen mit wget: # wget -r -e robots=off http://mirrors.creativecommons.org/ccmixter/contrib/Wired/ [...] BEENDET --2016-04-14 12:02:00-- Verstrichene Zeit: 3m 47s Geholt: 100 Dateien, 622M in 3m 38s (2,85 MB/s) B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 43 / 54
  • 44. Musik abspielen mit der Kommandozeile Tools (Auswahl): cmus cvlc mpc mpd mpg123 mocp ncmpcpp (mpd Frontend) ncmpcppcppcpp ... B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 44 / 54
  • 45. Musik abspielen mit mpg123 Musik abspielen (* ⇒ alle Dateien im aktuellen Verzeichnis; & ⇒ im Hintergrund): # mpg123 * & Musik abspielen mit mpg123 (Beispiel): # mpg123 mirrors.creativecommons.org/ccmixter/contrib/Wired/* & [1] 11267 b1@:~/LIT_2016/music> High Performance MPEG 1.0/2.0/2.5 Audio Player version 1.22.4; written and copyright by Michael Hipp and others free software (LGPL) without any warranty but with best wishes Directory: mirrors.creativecommons.org/ccmixter/contrib/Wired/ Playing MPEG stream 1 of 50: Beastie Boys - Now Get Busy.mp3 ... MPEG 1.0 layer III, VBR, 44100 Hz joint-stereo Title: Now Get Busy Artist: Beastie Boys Comment: Album: The Wired CD: Rip. Sample. Mash. Share. Year: 2004 Genre: Hip-Hop B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 45 / 54
  • 46. Musik abspielen mit der Kommandozeile: Wiedergabelisten (Playlists) als einfache Textdateien einfache Textdateien sind universeller als proprietäre Playlisten Nach- / Weiterverarbeitung mit allen Textwerkzeugen möglich Wiedergabeliste als einfache Text-Datei, z. B. playlist-1: lied1.mp3 /pfad/zum/lied2.mp3 /musik/noch_ein_lied.mp3 [...] B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 46 / 54
  • 47. Wiedergabeliste abspielen (z. B. mit mpg123) Playlist mit mpg123-Optionen: # mpg123 -@ playlist-1 Option -@: ⇒ Dateinamen einlesen (hier aus der Datei playlist; auch URL möglich!) Option -Z: ⇒ zufällige Wiedergabe (Shuffle-Mode) . . . oder auch als for-Schleife: # for I in $(cat playlist-1); do mpg123 $I; done B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 47 / 54
  • 48. Beispiel 7: Id-Tags von MP3s auslesen und damit automatisch Musikdateien benennen B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 48 / 54
  • 49. Id-Tags von MP3s auslesen Tools zum Auslesen von Id-Tags (kleine Auswahl): eyeD3 id3tool id3info mp3info mid3v2 (mutagen) . . . B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 49 / 54
  • 50. Id-Tags von MP3s auslesen mit mid3v2 Id-Tags von MP3s auslesen mit mid3v2: # mid3v2 -l ~/Musik/*.mp3 [...] TALB=The Wired CD: Rip. Sample. Mash. Share. TCOP=2004 David Byrne Licensed to the public under http://creativecommons.org/licenses/sampling+/1.0/ verify at http://ccmixter.org/file/Wired/61 TIT2=My Fair Lady TPE1=David Byrne TPUB=Creative Commons TRCK=2 TYER=2004 Beispiel: Titel extrahieren mit grep und cut # mid3v2 David Byrne - My Fair Lady.mp3 | grep TIT2 | cut -d’=’ -f 2 My Fair Lady . . . usw. . . . B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 50 / 54
  • 51. Skript: Mit Id-Tags automatisch Musikdateien benennen 1 gewünschte Tags auslesen (z. B. auch mit awk) 2 Tags zu neuem Namen zusammensetzen 3 Dateien umbenennen 4 . . . usw. . . . oder ein fertiges Shell-Skript verwenden . . . (z. B. abcde – kann Id-Tags auch aus Internet-Datenbank beziehen) B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 51 / 54
  • 52. CDs auslesen mit abcde Shell-Skript abcde („A Better CD Encoder“) = Frontend für andere Kommandozeilen-Tools abcde und nötige Systemkomponenten: Grabber zum Auslesen der Musikstücke aus Audio-CDs (z. B. cdparanoia oder cdda2wav) Encoder zum Generieren von MP3- oder Ogg-Vorbis-Dateien (oggenc, vorbize, lame, . . . ) CDDB-Tool (z. B. cd-discid) Programm zum Spiegeln von Daten aus dem WWW (z. B. wget) optional: Programm zu Setzen von ID3-Tags (z. B. id3v2) CDs auslesen mit abcde: # abcde Grabbing entire CD - tracks: 01 02 03 04 05 06 07 08 09 10 11 12 13 Retrieving 1 CDDB match...done. [...] B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 52 / 54
  • 53. Ein paar Links: 1 Link zum Vortrag „Some Bashing I“ (LIT 2015): http://www.luga.de/Angebote/Vortraege/Some_Bashing_LIT_2015 2 abcde - A Better CD Encoder: https://abcde.einval.com Shell-Skript, das auf der Kommandozeile CDs ausliest, die Tracks in MP3s oder Oggs konvertiert und auf Wunsch ID3-Tags hinzufügt 3 Bash und Shellscripts: Shell programmieren mit Bash Scripts: http://www.strassenprogrammierer.de/ shell-programmieren-mit-bash-scripts-unter-linux_tipp_ 598.html BASH Programming - Introduction HOW-TO: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html Advanced Bash-Scripting Guide: http://www.tldp.org/LDP/abs/html/ B1 Systems GmbH Some Bashing II - Mit der Kommandozeile Abläufe automatisieren 53 / 54
  • 54. Vielen Dank für Ihre Aufmerksamkeit! Bei weiteren Fragen wenden Sie sich bitte an info@b1-systems.de oder +49 (0)8457 - 931096 B1 Systems GmbH - Linux/Open Source Consulting,Training, Support & Development