Liomans Blog - Bashhttps://lioman.de/42 ist die Antwort – aber wie lautet die Frage?Fri, 20 Jul 2018 18:50:00 +0200Konsolentipps #005: Ordner erstellen und hinein wechselnhttps://lioman.de/2018/07/konsolentipps-005-ordner-erstellen-und-hinein-wechseln/<p>Wenn ich auf der Konsole einen Ordner erstelle, tue ich das meistens um entweder etwas hineinzukopieren oder um dort zu arbeiten und neue Dateien zu&nbsp;erstellen.</p> <p>Im ersten Fall ist es egal, wo ich mich befinde. Im Zweiten werde ich oft direkt in den gerade kreierten Arbeitsplatz&nbsp;wechseln.</p> <p>Ich benötige, also oft den&nbsp;Zweischritt:</p> <ol class="arabic simple"> <li><tt class="docutils literal">mkdir example_folder</tt></li> <li><tt class="docutils literal">cd example_folder</tt></li> </ol> <p>Das ist natürlich nicht ganz zufriedenstellend. Aus diesem Grund habe ich mir die Funktion <tt class="docutils literal">mkcd</tt> erstellt (In <tt class="docutils literal">.bash_profile</tt> oder <tt class="docutils literal">.bashrc</tt> eintragen).</p> <div class="highlight"><pre><span></span>mkcd<span class="w"> </span><span class="o">()</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span>mkdir<span class="w"> </span>-p<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$*</span><span class="s2">&quot;</span> <span class="w"> </span><span class="nb">cd</span><span class="w"> </span><span class="s2">&quot;</span><span class="nv">$*</span><span class="s2">&quot;</span> <span class="o">}</span> </pre></div> <p>Diese sehr einfache Version funktioniert gut und ich hatte bisher noch keine Probleme damit. Es gibt allerdings noch komplexere Beispiele, die allerlei Extras hinzufüge um etwaige Fehler abzufangen. Leider habe ich den Eintrag in meiner Browserhistorie nicht mehr gefunden. Wer die etwas sichere Variante benötigt, sollte auf <a class="reference external" href="https://stackoverflow.com">Stackoverflow</a>&nbsp;suchen.</p> LiomanFri, 20 Jul 2018 18:50:00 +0200tag:lioman.de,2018-07-20:/2018/07/konsolentipps-005-ordner-erstellen-und-hinein-wechseln/DigitalKonsoleKonsolentippsLinuxBashOpen SourceKonsolentipps #004: Einträge aus Konsolenhistorie löschenhttps://lioman.de/2018/07/konsolentipps-004-eintraege-aus-konsolenhistorie-loeschen/<p>Die History im Terminal ist wirklich praktisch, denn der gewünschte Befehl ist nicht viele Buchstaben, sondern nur ein paar Pfeiltasten entfernt. Noch angenehmer ist es, wenn man die Suche mit <tt class="docutils literal"><span class="caps">CTRL</span>+R</tt> nutzt. Leider landen auch mal Dinge in der Historie, die da gar nicht hingehören: kopierte Passwörter zum Beispiel. Man möchte dieses natürlich nicht gerade da lassen, sondern möglichst schnell&nbsp;entfernen.</p> <p>Zuerst kann man sich dazu die fünf letzten Einträge anzeigen lassen: <tt class="docutils literal">history | tail <span class="pre">-n</span> 5</tt></p> <p>Die Ausgabe sieht ungefär so&nbsp;aus:</p> <div class="highlight"><pre><span></span><span class="m">248</span><span class="w"> </span>su<span class="w"> </span>root <span class="m">249</span><span class="w"> </span>SuperSecurePassword123 <span class="m">250</span><span class="w"> </span><span class="nb">history</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>tail<span class="w"> </span>-n<span class="w"> </span><span class="m">5</span> </pre></div> <p>SuperSecurePassword123 soll am Besten verschwinden. Das kann man nun mit <tt class="docutils literal">history <span class="pre">-d</span> 249</tt> erreichen. Danach ist der Eintrag Nummer 249&nbsp;Geschichte.</p> LiomanSat, 07 Jul 2018 15:45:00 +0200tag:lioman.de,2018-07-07:/2018/07/konsolentipps-004-eintraege-aus-konsolenhistorie-loeschen/DigitalHistoryKonsoleKonsolentippsLinuxBashOpen SourceSkript: Aktuelle Version von Chromium runterladenhttps://lioman.de/2011/11/skript-aktuelle-version-von-chromium-runterladen/<p>In der Uni habe ich das Problem, dass auf den Rechnern nicht die aktuellsten Versionen aller Programme installiert sind. Bei manchen macht das nicht so viel aus, bei anderen ist das nicht so gut, denn bestimmte Funktionen bieten nur die aktuelleren&nbsp;Programme.</p> <p><a class="reference external" href="http://www.chromium.org">Chromium</a> ist da so ein Fall (Sync Funktioniert z.B.nicht) und da ich, auf den Uni-Rechnern mangels Rechten nicht einfach ein Programm installieren kann, habe ich mir ein kleines Skript gebastelt, dass einen aktuellen Snapshot&nbsp;runterlädt&nbsp;und dann die neuste Version&nbsp;ausführt.</p> <div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span> <span class="c1">#Get the latest Chromium-Version</span> <span class="nv">latest</span><span class="o">=</span><span class="sb">`</span>curl<span class="w"> </span>http://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux/LAST_CHANGE<span class="sb">`</span> <span class="c1">#Download Chromium</span> wget<span class="w"> </span>--progress<span class="o">=</span>bar:force<span class="w"> </span>-O<span class="w"> </span>/tmp/chrome-linux.zip<span class="w"> </span>http://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux/<span class="nv">$latest</span>/chrome-linux.zip<span class="w"> </span><span class="m">2</span>&gt;<span class="p">&amp;</span><span class="m">1</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>zenity<span class="w"> </span>--title<span class="o">=</span><span class="s2">&quot;Download Chromium-Version </span><span class="nv">$latest</span><span class="s2">!&quot;</span><span class="w"> </span>--progress<span class="w"> </span>--auto-close<span class="w"> </span>--auto-kill<span class="w"> </span>--width<span class="o">=</span><span class="m">400</span> <span class="c1">#Unzip</span> <span class="c1">#Exclude Erstellen</span> <span class="nv">exclude</span><span class="o">=</span><span class="sb">`</span>unzip<span class="w"> </span>-Z<span class="w"> </span>-1<span class="w"> </span>/tmp/chrome-linux.zip<span class="w"> </span><span class="p">|</span>grep<span class="w"> </span>-E<span class="w"> </span><span class="s1">&#39;locales.[^d]+[^e]*pak&#39;</span><span class="p">|</span><span class="w"> </span>tr<span class="w"> </span><span class="s2">&quot;\n&quot;</span><span class="w"> </span><span class="s2">&quot; &quot;</span><span class="sb">`</span> <span class="c1">#Menge der Dateien bestimmen</span> <span class="nv">filecount</span><span class="o">=</span><span class="sb">`</span>unzip<span class="w"> </span>-l<span class="w"> </span>/tmp/chrome-linux.zip<span class="w"> </span><span class="p">|</span>grep<span class="w"> </span>-v<span class="w"> </span>-E<span class="w"> </span><span class="s1">&#39;locales.[^d]+[^e]*pak&#39;</span><span class="p">|</span>tail<span class="w"> </span>-n<span class="w"> </span><span class="m">1</span><span class="p">|</span>tr<span class="w"> </span>-s<span class="w"> </span><span class="s2">&quot; &quot;</span><span class="w"> </span><span class="p">|</span>cut<span class="w"> </span>-d<span class="w"> </span><span class="s2">&quot; &quot;</span><span class="w"> </span>-f<span class="w"> </span><span class="m">2</span><span class="sb">`</span> <span class="c1">#Lösche alte Version</span> rm<span class="w"> </span>-R<span class="w"> </span><span class="nv">$HOME</span>/chrome-linux/ unzip<span class="w"> </span>-qq<span class="w"> </span>-o<span class="w"> </span>/tmp/chrome-linux.zip<span class="w"> </span>-d<span class="w"> </span>/<span class="nv">$HOME</span>/<span class="w"> </span>-x<span class="w"> </span><span class="nv">$exclude</span><span class="w"> </span><span class="p">&amp;</span> <span class="nb">exec</span><span class="w"> </span><span class="m">3</span>&gt;<span class="w"> </span>&gt;<span class="o">(</span>zenity<span class="w"> </span>--progress<span class="w"> </span>--title<span class="o">=</span><span class="s2">&quot;Entpacken&quot;</span><span class="w"> </span>--percentage<span class="o">=</span><span class="m">0</span><span class="w"> </span>--auto-close<span class="w"> </span>--width<span class="o">=</span><span class="m">400</span><span class="o">)</span> <span class="k">while</span><span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="sb">`</span>ps<span class="w"> </span>-A<span class="w"> </span><span class="p">|</span>grep<span class="w"> </span>-c<span class="w"> </span>unzip<span class="sb">`</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;1&quot;</span><span class="w"> </span><span class="o">]</span><span class="p">;</span> <span class="k">do</span> <span class="nv">count</span><span class="o">=</span><span class="k">$((</span><span class="sb">`</span>ls<span class="w"> </span>-R<span class="w"> </span>/<span class="nv">$HOME</span>/chrome-linux/<span class="w"> </span><span class="p">|</span>wc<span class="w"> </span>-w<span class="sb">`</span><span class="o">-</span><span class="m">4</span><span class="k">))</span> <span class="nv">Prozent</span><span class="o">=</span><span class="k">$((</span><span class="o">(</span><span class="nv">$count</span><span class="o">*</span><span class="m">100</span><span class="o">/</span><span class="nv">$filecount</span><span class="k">))</span><span class="o">)</span> <span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;</span><span class="nv">$Prozent</span><span class="s2">&quot;</span><span class="w"> </span>&gt;<span class="p">&amp;</span><span class="m">3</span> <span class="k">done</span> killall<span class="w"> </span>zenity <span class="c1">#Aufräumen</span> rm<span class="w"> </span>-R<span class="w"> </span>/tmp/chrome-linux* <span class="c1">#Öffne neue Version</span> <span class="nb">cd</span><span class="w"> </span><span class="nv">$HOME</span>/chrome-linux/ ./chrome-wrapper<span class="w"> </span>--allow-outdated-plugins<span class="w"> </span><span class="p">&amp;</span> <span class="nb">exit</span><span class="w"> </span><span class="m">0</span> </pre></div> <p>Dies ist sicher nicht die eleganteste Lösung, aber das Skript gibt aus was es gerade tut und macht das was es soll zufriedenstellend. Der Umweg über das /tmp Verzeichnis ist nötig, weil die Quotas nicht gerade großzügig bemessen sind. Hat man eh eine aktuelle Version der diversen Plugins (Flash) auf dem Rechner oder Sicherheitsbedenken sollte man beim Aufruf von Chromium das <em>&#8212;allow-outdated-plugins</em>&nbsp;entfernen.</p> <p><strong>Update:</strong> Habe das Skript nochmal deutlich aufgeräumt und nun ist es nicht nur kürzer (27 statt 42 Zeilen), sondern auch deutlich schneller. Statt die Dateien erst zu entpacken und dann ohne die Sprachpakete zu verschieben entpacke nun direkt in den Zielordner ohne die überflüssigen Dateien mitzuentpacken. Dazu habe ich ein bisschen mit Regulären Ausdrücken rumexpiremntieren müssen. Ich konnte mich bisher mit denen noch nicht anfreunden und so entwischt mir auch jetzt immer noch eine Datei. Nicht nur <em>&#8220;de.pak&#8221;</em> wird entpackt sondern auch <em>&#8220;da.pak&#8221;</em>. Hat jemand&nbsp;Verbesserungsvorschläge?</p> LiomanFri, 18 Nov 2011 14:00:00 +0100tag:lioman.de,2011-11-18:/2011/11/skript-aktuelle-version-von-chromium-runterladen/DigitalbashChromiumLinuxSkriptUbuntuUbuntuusersPlanetScript: Videos in XVID encodierenhttps://lioman.de/2009/11/script-videos-in-xvid-encodieren/<p><strong>*Platzsparende Videocodecs wie*</strong> <a class="reference external" href="http://de.wikipedia.org/wiki/X264">x264</a> <strong>*verpackt in einem <span class="caps">MP4</span>-Container bieten hochqualitative Videos bei kleiner Größe. So ist es nicht verwunderlich, dass Videos mit diesem Format im Netz weit verbreitet sind. Das Problem dabei: Viele Standaloneplayer können es nicht lesen. Man muss also&nbsp;umencodieren.*</strong></p> <p>Da ich immer mal wieder Videos in verschiedensten Formaten aus dem Netz lade, sie aber mit dem <span class="caps">DVD</span>-Recorder anschauen möchte, habe ich ein kleines Script geschrieben, dass alles automatisch&nbsp;erledigt.</p> <p>Der Player kann wie die meisten <span class="caps">XVID</span>/<span class="caps">DIVX</span> - Avicontainer lesen. Es sollen also alle Videos in dieses Format überführt werden. Das Problem: Es gibt viele verschiedene Quellen und Qualitätsstufen. <span class="caps">HDTV</span>-Videos wie <a class="reference external" href="http://www.home-2009.com/"><span class="caps">HOME</span></a>über <a class="reference external" href="http://www.legaltorrents.com/torrents/547-home-2009">Legaltorrents.com</a> (Sehr groß, mp4, aac), Youtube/ Vimeo videos (kleine flv, zT. <span class="caps">HQ</span>-Videos/mp4) , Streammitschnitte (unterschiedlicher Ausführung) und natürlich <span class="caps">TV</span>-Mitschnitte in <span class="caps">DVD</span>-Qualität. Die verschieden Quellen sollen alle jeweils so optimal wie möglich verarbeitet werden und von Hand ist es viel zu viel&nbsp;Arbeit.</p> <p>Ich möchte als Ergebnis eine möglichst hohe Qualität haben, bei vernünftiger Videogröße und natürlich absoluter&nbsp;Kompatibilität.</p> <p>Dazu folgende Erkenntnis: Das Ergebnis wird nie besser als die Quelle werden. Es macht also keinen Sinn aus einem kleinen *.flv-Video ein 1280x720-Video mit ac3-Sound und einer Bitrate von 1000 zu machen. Andererseits kann der Player nicht mit zu Großen Bildern umgehen und ich will ja auch Platz&nbsp;sparen.</p> <p>Was macht das&nbsp;Script:</p> <ol class="arabic simple"> <li>Quelle&nbsp;prüfen</li> <li>Qualität festsetzen nicht besser als Quelle aber höchstens 720 in der Breite bei einer Bitrate von&nbsp;750</li> <li>2-pass-Encodieren und danach&nbsp;aufräumen</li> </ol> <p>Wie nutzt man das&nbsp;Script?</p> <ol class="arabic"> <li><p class="first">runterladen</p> </li> <li><p class="first">entpacken</p> </li> <li><pre class="first literal-block"> chmod +x #(Ausfuehrbar machen) </pre> </li> <li><pre class="first literal-block"> ./Video2xvid video1 video2 video3 </pre> <p></li> <li><p class="first">Das Script Encodiert alle Videos&nbsp;nacheinander</p> </li> </ol> <p>Über Vorschläge zur verbesserung des Scriptes oder Fragen nach Hilfe freue ich&nbsp;mich.</p> <p>Nun das Script, ich hoffe ich habe es ausreichend&nbsp;kommentiert:</p> <p>(Weiter unten nochmal als&nbsp;Download)</p> <pre class="literal-block"> #!/bin/bash #Lösche logdatei um Störungen zu vermeiden rm -v divx2pass.log Gesamtdauer=0 while [ ${1} != '' ] do #Bestimme Breite BREITE=`mplayer -identify \$1\ -ao null -vo null -frames 0 2&gt;/dev/null | grep ^ID_VIDEO_WIDTH | cut -c16-`; echo \Orginalbreite= $BREITE\ if [ $BREITE -le 720 ]; then VBREITE=$BREITE else VBREITE=720 fi # Bestimme Audio-Codec ACODEC=`mplayer -identify \$1\ -ao null -vo null -frames 0 2&gt;/dev/null | grep ^ID_AUDIO_CODEC | cut -c16-`; echo \Audiocodec= $ACODEC\ if [ \$ACODEC\ == \a52\ -o \$ACODEC\ == \faad\ ]; then AOPTS=\lavc -lavcopts acodec=ac3 -af volnorm=1\ else AOPTS=\mp3lame -lameopts abr:br=196 -af lavcresample=44100,volnorm=1\ fi #Bestime Bitrate RATE=`mplayer -identify \$1\ -ao null -vo null -frames 0 2&gt;/dev/null | grep ^ID_VIDEO_BITRATE | cut -c18-`; echo \Orginalbitrate= $RATE\ if [ $RATE == 0 ]; then BRATE=750 else if [ $RATE -le 800000 ]; then BRATE=$((RATE/1000)) else BRATE=750 fi fi # Bestimme Namen NAME=`echo \$1\ | sed 's/\.[^\.]*$//'`; echo $NAME #Bestimme Startzeit START=$(date +\%s\); #Starte Codieren echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ echo \Encodiere $1 in $NAME-xvid.avi\ echo echo \Beginne mit erstem Durchgang\ echo echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ mencoder -ffourcc XVID -oac $AOPTS -ovc xvid -xvidencopts pass=1:trellis:hq_ac -vf scale=$VBREITE:-3 -o /dev/null $1 echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ echo \Nun folgt Durchgang Nummer Zwei\ echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ mencoder -ffourcc XVID -oac $AOPTS -af lavcresample=44100,volnorm=1 -ovc xvid -xvidencopts pass=2:bitrate=$BRATE:hq_ac:trellis:chroma_opt:vhq=2:bvhq=1:quant_type=mpeg -vf scale=$VBREITE:-3 -o $NAME-xvid.avi $1 #Berechne Dauer ENDE=$(date +\%s\); DAUER=$(((ENDE-START)/60)); echo \************************************\ echo \**Encodieren in XVID abgeschlossen**\ echo \** **\ echo \** es dauerte ca. $DAUER Minuten **\ echo \************************************\ echo Gesamtdauer=$((Gesamtdauer+DAUER)) # Aufräumen echo -e \Logdatei wird gelöscht\ rm -v divx2pass.log # Auswahl anzeigen echo \Soll Orginaldatei gelöscht werden [y/n]\ echo \Nach 15 Sekunden ohne Eingabe wird ohne Löschen beendet\ read -t 15 -n 1 TASTE if [ \$TASTE\ == \y\ ] ; then echo \Lösche $1\ rm -f $1 shift else shift fi done # Beenden echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ echo echo \Encodieren beendet\ echo echo \Gesamtdauer ca. $Gesamtdauer Minuten\ echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ </pre> <p>Und hier die Datei zum Download: <a class="reference external" href="https://lioman.de/2009/11/script-videos-in-xvid-encodieren/Video2xvid.tar.gz">Video2xvid.tar.gz</a></p> LiomanMon, 09 Nov 2009 18:40:00 +0100tag:lioman.de,2009-11-09:/2009/11/script-videos-in-xvid-encodieren/Wissenschaft und TechnikbashencodierenLinuxscriptVideovideocodecsxvid