Shellcommandos die ich immer wieder mal brauche

Musiksammlung

Um die Oggsammlung in mp3 zu konvertieren, z.B. für einen USB Stick in einem Audioplayer. Die Dateien sollen nachher in der Albumreihenfolge abgespielt werden, der Player ist aber saudoof und kann nur in FAT Verzeichnisreihenfolge abspielen.

Ein anderer Player (Onkyo CR-N765) ist deutlich schlauer und kann insbesondere .ogg Dateien abspielen. Wenn die Dateien vom Stick und nicht über DLNA kommen sollen, müssen Sie aber im Verzeichnis umbenannt werden, da die Dateien vom Player vor dem Abspielen alphabetisch sortiert werden.

Player mit mp3 only

Neues Verzeichnis anlegen und die ogg-Dateien des Albums hineinkopieren. Für jedes Album ein eigenes Verzeichnis. Dann in jedem Verzeichnis wie folgt vorgehen.

for i in *.ogg ; do echo $i; oggdec $i ; lame $(basename $i .ogg).wav ; done
for i in *.ogg ; do L=`vorbiscomment -l "${i}" |grep tracknumber |cut -f2 -d'=' ` ; Z=`basename ${i} .ogg`; mv $Z.mp3 $L.mp3 ; done
rm *.ogg 

Anzeigen in realer Verzeichnisreihenfolge (unsortiert)

ls -lU

Falls die Dateien nicht in der gewünschten Abspielreihenfolge (1,2,3,4 usw.) angeordnet sind (sehr wahrscheinlich) die Dateien nochmals kopieren. Oder, besser das Programm "fatsort" benutzen. "-n" sortiert in natural order (1,2,3 ... 10,11) und nicht in ASCII order (1,10,11,12... 2,20,21,22..). "-d" gibt ein Verzeichnis an, dann wird nur das sortiert.

fatsort -n -d  /dev/sd

danach dann die alten Dateien löschen. Die Shellexpansionen "*" und "?" expandieren automagisch alphabetisch.

Onkyo CR-N765, kann ogg Dateien abspielen

Die Dateien kann man in der Verzeichnisstruktur direkt auf den Stick kopieren. Leider werden vom Gerät inital nur die Dateinamen angezeigt und die Dateien werden vor dem Abspielen alphabetisch sortiert, d.h. man muß Sie "1_...", "2_..." benennen, wenn man Sie in Albumreihenfolge abspielen will.

Der folgende Trick fügt die Tracknumber aus den vorbiscomments vorne an den Dateinamen mit Underscore an. Direkt in jedem Verzeichnis ausführen.

for i in *.ogg; do L=`vorbiscomment -l "${i}" |grep tracknumber |cut -f2 -d'=' ` ; Z=`basename ${i} .ogg`; mv "${i}" "${L}_${i}" ; done 

Bilder von der Kamera

Hässlich großgeschriebene Bilddateinamen in Kleinschreibung konvertieren.

for i in *.JPG; do mv $i ${i,,}; done

MPEG2-Transportströme analyisieren

Habe ich nicht auf Anhieb gefunden: Ein Tool um MPEG2-Transportströme zu untersuchen (".ts"-Dateien). Dazu muß man das Paket mediainfo installieren.

wget -S "http://172.16.0.4:9981/stream/channelnumber/966" -O test.ts
mediainfo test.ts
General
ID                                       : 501 (0x1F5)
Complete name                            : test.ts
Format                                   : MPEG-TS
File size                                : 136 KiB
Duration                                 : 3s 361ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 281 Kbps
[...]

aspect ratio einer von ts nach mkv konvertierten Datei konvertieren. Hat man eine Aufnahme vom Fernsehen mit avidemux2.6 gekürzt und z.B. als mkv gesichert geht oft der Aspekt verloren. Die Auflösung von SD ist 720x576, welches aber in 16:9 dargestellt werden soll. Korrektur im mkv:

mkvpropedit myvideo.mkv --edit track:v1 --set pixel-width=720 --set pixel-height=817

Zeilen aus einer Datei mittendrin herausschneiden

head und tail kann Anfang oder Ende einer Datei herausschneiden. Will man ein "slice" herausschneiden so nimmt man am besten sed.

sed -n 101,200p Datei.csv

Schneidet die Zeilen 101 bis 200 aus einer Datei aus.

sed -n -e 1p -e 101,200p Datei.csv

Schneidet die 1. Zeile und die Zeilen 101~200 aus einer Datei aus. Braucht man öfter mal für CSV Dateien.

vim

Uhrzeit-/Datum Zeitstempel 2018-03-18T11:58:59.817Z mit vim in mysql-Format umkonvertieren 2018-03-19 11:58:59. Dazu wird der folgende Ausdruck am ":" Prompt von vim gebraucht.

%s/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)T\([0-9]\{2\}\):\([0-9]\{2\}\):\([0-9]\{2\}\)\.[0-9]\{3\}Z/\1-\2-\3 \4:\5:\6/

Bildschirmsteuerung/BMC

Die Textconsole immer anlassen. Das ist wichtig auf Servern die einen BMC (Baseboard management controller) haben wo man die Console über das Netzwerk umleiten kann. So kann man die Bildschirmausgaben sehen, wenn z.B. der Kernel gecrashed ist (ansonsten ist der Bildschirm nämlich wegen des Bildschirmschoners schwarz). Am besten in /etc/rc.local einfügen.

# Bildschirmschoner ausschalten. So sollte bei einem Crash o.ä. die Konsole
# abrufbar sein (über BMC)
setterm -blank 0