<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CLI on besserentwickeln.de</title><link>https://besserentwickeln.de/categories/cli/</link><description>Recent content in CLI on besserentwickeln.de</description><generator>Hugo -- gohugo.io</generator><language>de</language><copyright>Philipp Tuchardt</copyright><lastBuildDate>Tue, 11 Mar 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://besserentwickeln.de/categories/cli/index.xml" rel="self" type="application/rss+xml"/><item><title>Symbolische Links unter Linux erstellen: Eine sichere und effektive Anleitung</title><link>https://besserentwickeln.de/p/symbolische-links-unter-linux-erstellen-eine-sichere-und-effektive-anleitung/</link><pubDate>Tue, 11 Mar 2025 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/p/symbolische-links-unter-linux-erstellen-eine-sichere-und-effektive-anleitung/</guid><description>&lt;h1 id="symbolische-links-unter-linux-erstellen-eine-sichere-und-effektive-anleitung">Symbolische Links unter Linux erstellen: Eine sichere und effektive Anleitung
&lt;/h1>&lt;p>Symbolische Links (Symlinks) sind eine mächtige Funktion unter Linux, mit der du Verknüpfungen zu Dateien oder Verzeichnissen erstellen kannst. Das kann die Dateiverwaltung effizienter und flexibler machen. In dieser Anleitung schauen wir uns an, wie man Symlinks sicher erstellt und dabei häufige Fallstricke vermeidet.&lt;/p>
&lt;h2 id="was-ist-ein-symbolischer-link">Was ist ein symbolischer Link?
&lt;/h2>&lt;p>Ein symbolischer Link ist eine spezielle Art von Datei, die auf eine andere Datei oder ein anderes Verzeichnis verweist. Anders als Hardlinks, die auf denselben Inode wie die Originaldatei verweisen, speichern Symlinks lediglich den Pfad zum Ziel. Das macht sie besonders nützlich, um Dateien über verschiedene Speicherorte hinweg zu organisieren.&lt;/p>
&lt;h2 id="wie-man-einen-symbolischen-link-erstellt">Wie man einen symbolischen Link erstellt
&lt;/h2>&lt;p>Um unter Linux einen symbolischen Link zu erstellen, wird der Befehl &lt;code>ln -s&lt;/code> mit folgender Syntax verwendet:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ln -s &lt;span class="o">[&lt;/span>target&lt;span class="o">]&lt;/span> &lt;span class="o">[&lt;/span>link_name&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Um zum Beispiel einen Symlink für ein Verzeichnis unter &lt;code>/home/user/documents/&lt;/code> auf dem Desktop zu erstellen, führst du aus:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ln -s /home/user/documents/ /home/user/Desktop/documents
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Das erstellt eine Verknüpfung zum Verzeichnis &lt;code>documents&lt;/code> auf dem Desktop, während das ursprüngliche Verzeichnis unverändert bleibt.&lt;/p>
&lt;h3 id="best-practices-für-die-sichere-nutzung-von-symlinks">Best Practices für die sichere Nutzung von Symlinks
&lt;/h3>&lt;p>Um Fehler zu vermeiden und Zuverlässigkeit sicherzustellen, sollten folgende Best Practices befolgt werden:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Zielpfad überprüfen&lt;/strong>
Bevor ein Symlink erstellt wird, sicherstellen, dass die Zieldatei oder das Zielverzeichnis existiert. Dazu Befehle wie &lt;code>ls&lt;/code> oder &lt;code>file&lt;/code> nutzen:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ls -l /home/user/documents/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>Absolute Pfade verwenden&lt;/strong>
Relative Pfade funktionieren zwar auch, aber absolute Pfade sorgen für Konsistenz und verhindern Probleme, falls der Symlink in unterschiedlichen Kontexten verwendet wird.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Auf bestehende Dateien oder Links prüfen&lt;/strong>
Sicherstellen, dass am Zielort nicht bereits eine Datei oder ein Verzeichnis mit demselben Namen existiert. Falls nötig, die vorhandene Datei vor dem Erstellen des Symlinks umbenennen oder entfernen:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rm -r /home/user/Desktop/documents
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>Den Symlink testen&lt;/strong>
Nach der Erstellung prüfen, ob der Symlink korrekt funktioniert:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ls -l /home/user/Desktop/documents
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Wird das Zielverzeichnis gelöscht, ist der Symlink defekt (er erscheint in den meisten Terminals rot). Einen defekten Symlink kannst du entfernen mit:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rm /home/user/Desktop/documents
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="häufige-anwendungsfälle-für-symlinks">Häufige Anwendungsfälle für Symlinks
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Konfigurationsdateien organisieren:&lt;/strong> Symlinks zu häufig genutzten Konfigurationsdateien erstellen, die zentral gespeichert sind.&lt;/li>
&lt;li>&lt;strong>Softwareentwicklung:&lt;/strong> Symlinks nutzen, um verschiedene Versionen von Bibliotheken zu verwalten, ohne Pfade zu ändern.&lt;/li>
&lt;li>&lt;strong>Geteilte Ordner:&lt;/strong> Gemeinsam genutzte Verzeichnisse mit Benutzer-Home-Verzeichnissen verknüpfen für schnellen Zugriff.&lt;/li>
&lt;/ul>
&lt;h2 id="fazit">Fazit
&lt;/h2>&lt;p>Symbolische Links sind ein einfaches, aber mächtiges Werkzeug für effizientes Dateimanagement unter Linux. Wer sich an Best Practices hält, sorgt dafür, dass die eigenen Symlinks zuverlässig und effektiv bleiben. Egal ob für Organisation, Komfort oder Systemkonfiguration – Symlinks können den eigenen Workflow deutlich verbessern.&lt;/p></description></item><item><title>Dateifreigabe lokal via Python</title><link>https://besserentwickeln.de/p/dateifreigabe-lokal-via-python/</link><pubDate>Fri, 21 Feb 2025 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/p/dateifreigabe-lokal-via-python/</guid><description>&lt;h1 id="dateien-lokal-via-python-teilen-kurze-und-einfache-anleitung">Dateien lokal via Python teilen: Kurze und einfache Anleitung
&lt;/h1>&lt;h2 id="warum-python-für-lokale-dateifreigabe-nutzen">Warum Python für lokale Dateifreigabe nutzen?
&lt;/h2>&lt;p>Pythons integrierter HTTP-Server bietet eine einfache und effiziente Möglichkeit, Dateien innerhalb eines lokalen Netzwerks zu teilen. Es wird keine zusätzliche Software benötigt, was ihn zu einer schlanken und effektiven Lösung für schnelle Dateiübertragungen macht.&lt;/p>
&lt;h2 id="voraussetzungen-python-auf-deinem-system-installieren">Voraussetzungen: Python auf deinem System installieren
&lt;/h2>&lt;p>Vor dem Fortfahren sicherstellen, dass Python installiert ist:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo apt update &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> sudo apt install -y python3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="wie-man-die-lokale-ip-adresse-findet">Wie man die lokale IP-Adresse findet
&lt;/h2>&lt;p>Um die lokale IP-Adresse herauszufinden, nutze:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hostname -I &lt;span class="p">|&lt;/span> awk &lt;span class="s1">&amp;#39;{print $1}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Deine lokale IP sollte wie &lt;code>192.168.xxx.xxx&lt;/code> aussehen. Das ist wichtig, um von einem anderen Gerät auf die geteilten Dateien zugreifen zu können.&lt;/p>
&lt;h2 id="schritt-für-schritt-den-python-http-server-starten">Schritt für Schritt: Den Python-HTTP-Server starten
&lt;/h2>&lt;ol>
&lt;li>
&lt;p>Ein Terminal öffnen und in das Verzeichnis mit den Dateien wechseln, die geteilt werden sollen:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> /path/to/your/files
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>Den Python-HTTP-Server starten:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">python3 -m http.server &lt;span class="m">8000&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Das startet einen einfachen HTTP-Server auf Port &lt;code>8000&lt;/code>, wodurch die Dateien im Verzeichnis über das lokale Netzwerk erreichbar werden.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="wie-man-von-einem-anderen-gerät-auf-die-geteilten-dateien-zugreift">Wie man von einem anderen Gerät auf die geteilten Dateien zugreift
&lt;/h2>&lt;p>Auf jedem Gerät im selben Netzwerk:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Einen Webbrowser öffnen.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Folgendes in die Adresszeile eingeben:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">http://192.168.xxx.xxx:8000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;em>(&lt;code>xxx.xxx&lt;/code> durch die tatsächliche lokale IP-Adresse ersetzen.)&lt;/em>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="best-practices-für-sichere-lokale-dateifreigabe">Best Practices für sichere lokale Dateifreigabe
&lt;/h2>&lt;ul>
&lt;li>
&lt;p>&lt;strong>Lokal bleiben&lt;/strong>: Diese Methode ist nur für lokale Netzwerke gedacht. &lt;strong>Diesen Server niemals dem Internet aussetzen.&lt;/strong>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Port bei Bedarf ändern&lt;/strong>: Falls Port &lt;code>8000&lt;/code> belegt ist, einen anderen wählen:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">python3 -m http.server &lt;span class="m">8080&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>Interface gezielt wählen&lt;/strong>: &lt;code>--bind&lt;/code> bestimmt, auf welcher Netzwerk-Schnittstelle der
Server lauscht – z. B. nur im LAN und nicht über ein zusätzliches VPN:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">python3 -m http.server &lt;span class="m">8000&lt;/span> --bind 192.168.xxx.xxx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Das begrenzt aber &lt;strong>nicht&lt;/strong>, &lt;em>wer&lt;/em> sich verbinden darf – jeder, der die Adresse erreicht,
hat Zugriff. Für echte Zugriffsbeschränkung eine Firewall verwenden.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="fazit">Fazit
&lt;/h2>&lt;p>Pythons integrierter HTTP-Server ist eine schnelle und effektive Möglichkeit, Dateien lokal zu teilen. Mit diesen Schritten kannst du Daten einfach zwischen Geräten übertragen, ohne zusätzliche Software. &lt;strong>Speichere diese Anleitung für später!&lt;/strong>&lt;/p></description></item><item><title>ImageMagick Batch-Resize</title><link>https://besserentwickeln.de/p/imagemagick-batch-resize/</link><pubDate>Mon, 19 Dec 2022 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/p/imagemagick-batch-resize/</guid><description>&lt;h2 id="voraussetzung">Voraussetzung
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="http://www.imagemagick.org/script/index.php" target="_blank" rel="noopener"
>ImageMagick&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="installation">Installation
&lt;/h3>&lt;h4 id="debianubuntu">Debian/Ubuntu
&lt;/h4>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">sudo apt-get install imagemagick
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="macosbrew">MacOS/Brew
&lt;/h4>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">brew install imagemagick
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="lösung">Lösung
&lt;/h2>&lt;p>Dies in dem Verzeichnis mit den Bildern ausführen, die verkleinert werden sollen. Nicht vergessen, vorher ein Verzeichnis &lt;code>small-jpgs&lt;/code> zu erstellen.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">mogrify -path ../small-jpgs -resize 30% *
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Es ist auch möglich, die Qualität zu reduzieren, indem man z. B. &lt;code>-quality 90&lt;/code> hinzufügt.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">mogrify -path ../small-jpgs -quality &lt;span class="m">90&lt;/span> -resize 30% *
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Und wenn gewünscht, kann sogar das Bildformat mit &lt;code>-format jpg&lt;/code> geändert werden.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">mogrify -path ../small-jpgs -quality &lt;span class="m">90&lt;/span> -format jpg -resize 30% *
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Unterverzeichnis finden</title><link>https://besserentwickeln.de/n/unterverzeichnis-finden/</link><pubDate>Sun, 21 Aug 2022 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/n/unterverzeichnis-finden/</guid><description>&lt;p>Nach einem bestimmten Unterverzeichnis im aktuellen Verzeichnis suchen&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">find -type d -name &amp;#39;DirectoryName&amp;#39;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Mit Wildcard&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">find -type d -name &amp;#39;DirectoryNameWithWildCard*&amp;#39;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>dcraw CR2 Batch-Verarbeitung</title><link>https://besserentwickeln.de/n/dcraw-cr2-batch-verarbeitung/</link><pubDate>Tue, 21 Jun 2022 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/n/dcraw-cr2-batch-verarbeitung/</guid><description>&lt;p>Ich habe schon zweimal danach gesucht, deshalb speichere ich das hier ab. Mit folgendem Befehl kannst du alle Raws (CR2) im aktuellen Verzeichnis in JPG umwandeln.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> filename in *.CR2&lt;span class="p">;&lt;/span> &lt;span class="k">do&lt;/span> dcraw -c -w &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$filename&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> cjpeg -quality &lt;span class="m">90&lt;/span> &amp;gt; &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$filename&lt;/span>&lt;span class="s2">.jpg&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nb">echo&lt;/span> &lt;span class="nv">$filename&lt;/span> &lt;span class="k">done&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">done&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>History-Format</title><link>https://besserentwickeln.de/p/history-format/</link><pubDate>Wed, 08 Jun 2022 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/p/history-format/</guid><description>&lt;p>Der History einen Zeitstempel für den Befehlsverlauf hinzufügen (nur für die aktuelle Terminal-Sitzung) mit folgendem Befehl:&lt;/p>
&lt;p>&lt;code>HISTTIMEFORMAT=&amp;quot;%F %T &amp;quot;&lt;/code>&lt;/p>
&lt;p>Jetzt &lt;code>history&lt;/code> eingeben, und du solltest Zeitstempel bei deinen Bash-History-Befehlen sehen.&lt;/p>
&lt;p>&lt;a class="link" href="https://www.linuxuprising.com/2019/07/bash-history-how-to-show-timestamp-when.html" target="_blank" rel="noopener"
>Quelle&lt;/a>&lt;/p></description></item><item><title>SSH Key</title><link>https://besserentwickeln.de/n/ssh-key/</link><pubDate>Wed, 08 Jun 2022 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/n/ssh-key/</guid><description>&lt;p>Dank des &lt;a class="link" href="https://www.youtube.com/watch?v=qvdlLTyUJ5I" target="_blank" rel="noopener"
>Talks&lt;/a> von &lt;a class="link" href="https://martin.leyrer.priv.at/" target="_blank" rel="noopener"
>Martin Leyrer&lt;/a> werden meine SSH-Keys jetzt so generiert:&lt;/p>
&lt;p>&lt;code>ssh-keygen -t ed25519 -a 420 -f ~/.ssh/id_ed25519 -C &amp;quot;foo@ba.de&amp;quot;&lt;/code>&lt;/p></description></item><item><title>Nur die drei neuesten Dateien behalten</title><link>https://besserentwickeln.de/p/nur-die-drei-neuesten-dateien-behalten/</link><pubDate>Tue, 24 May 2022 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/p/nur-die-drei-neuesten-dateien-behalten/</guid><description>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">ls -t | sed -e &amp;#39;1,3d&amp;#39; | xargs -d &amp;#39;\n&amp;#39; -r rm
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="was-passiert-hier">Was passiert hier?
&lt;/h2>&lt;p>&lt;code>ls -t&lt;/code>
listet alle Dateien im aktuellen Verzeichnis in absteigender Reihenfolge der Änderungszeit auf. Die zuletzt geänderten Dateien stehen zuerst, ein Dateiname pro Zeile.&lt;/p>
&lt;p>&lt;code>sed -e '1,3d'&lt;/code> löscht die ersten 3 Zeilen, also die 3 neuesten Dateien.&lt;/p>
&lt;p>&lt;code>xargs -d '\n' -r rm&lt;/code> liest die restlichen Zeilen, nimmt dabei &lt;code>\n&lt;/code> als einziges Trennzeichen
(so überstehen Dateinamen mit Leerzeichen) und hängt sie als Argumente an einen – bei sehr
vielen Dateien auch mehrere – &lt;code>rm&lt;/code>-Aufrufe an. &lt;code>-r&lt;/code> verhindert, dass &lt;code>rm&lt;/code> ohne Argumente
läuft, falls es 3 oder weniger Dateien gibt.&lt;/p>
&lt;blockquote>
&lt;p>&lt;code>xargs -d&lt;/code> ist eine GNU-Erweiterung. Unter macOS/BSD stattdessen
&lt;code>ls -t | tail -n +4 | tr '\n' '\0' | xargs -0 rm&lt;/code> verwenden.&lt;/p>&lt;/blockquote>
&lt;p>&lt;a class="link" href="https://stackoverflow.com/questions/2960022/shell-script-to-count-files-then-remove-oldest-files" target="_blank" rel="noopener"
>Quelle&lt;/a>&lt;/p></description></item><item><title>PHP CLI memory_limit</title><link>https://besserentwickeln.de/n/php-cli-memory_limit/</link><pubDate>Wed, 29 Sep 2021 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/n/php-cli-memory_limit/</guid><description>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">php -d &lt;span class="nv">memory_limit&lt;/span>&lt;span class="o">=&lt;/span>512M
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>String in Datei finden</title><link>https://besserentwickeln.de/n/string-in-datei-finden/</link><pubDate>Mon, 04 Jan 2021 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/n/string-in-datei-finden/</guid><description>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">grep -rnw &lt;span class="s1">&amp;#39;/path/to/somewhere/&amp;#39;&lt;/span> -e &lt;span class="s1">&amp;#39;pattern&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Ubuntu: MOV zu MP4</title><link>https://besserentwickeln.de/n/ubuntu-mov-zu-mp4/</link><pubDate>Sun, 29 Mar 2020 00:00:00 +0000</pubDate><guid>https://besserentwickeln.de/n/ubuntu-mov-zu-mp4/</guid><description>&lt;p>&lt;code>ffmpeg -i input.mov -codec copy output.mp4&lt;/code>&lt;/p></description></item></channel></rss>