Fryboyter

Verzeichnis mit systemd überwachen

Heute bekam ich folgende Anfrage (hier abgewandelt, da der genaue Vorgang intern bleiben soll). Wenn in einem Verzeichnis eine Avi-Datei gespeichert wird soll diese automatisch in eine Mkv-Datei (libtheora und libvorbis) umgewandelt und verschoben werden.

Als Erstes habe ich unter /home/video/ das Verzeichnis videos und Verzeichnis videos2 erstellt. Als Nächstes habe ich im gleichen Homeverzeichnis folgendes Shellscript erstellt:

#!/bin/bash
cd /home/video/videos/ 
for i in *.avi; do
ffmpeg -i "$i" -vcodec libtheora -acodec libvorbis "${i%.*}.mkv" 
done
mv *.mkv /home/video/videos2/
rm *.avi

Das Shellscript wechselt erst in das eben erstellte Verzeichnis videos. Dort sucht es nach vorhandenen Dateien mit der Endung .avi und wandelt diese in eine Mkv-Datei mit libtheora und Libvorbis um. Danach werden die Mkv-Dateien in das Verzeichnis videos2 verschoben und die vorhandenen Avi-Datei gelöscht.

Als Nächstes habe ich mir Root-Rechte verschafft und mit diesen unter /etc/systemd/system die Datei convert.service mit folgendem Inhalt angelegt.

[Unit]
Description=Videos in ~/home/video/video automatisch konvertieren

[Service]
Type=oneshot
ExecStart=/home/video/convert.sh

Hier wird im Grunde genommen nur angegeben, dass das eben erstellte Shellscript convert.sh ausgeführt wird.

Im gleichen Verzeichnis habe ich nun noch die Datei convert.path angelegt und mit folgendem Inhalt befüllt.

[Unit]
Description=Startet convert.service wenn eine Datei in /home/video/video$ 

[Path]
PathModified=/home/video/videos/ 

[Install]
WantedBy=multi-user.target

Hier ist der Abschnitt Path der wichtige Teil. Sobald im Verzeichnis /home/video/videos etwas geändert wird (wie eben, dass dort eine Avi-Datei abgespeichert wird) wird das in der Service-Datei genannte Shellscript ausgeführt. Anstelle von PathModified gibt es noch PathExists=, PathExistsGlob=, PathChanged=, und DirectoryNotEmpty=. Diese werden unter man systemd.path oder hier online genauer erklärt.

Nun habe ich mittels systemctl start convert.path das ganze einmalig gestartet. Dass es nach einem Testlauf keine Probleme gegeben hat, habe ich diese Automatisierung mittels systemctl enable convert.path scharf geschaltet, sodass der Spaß auch einen Neustart des Systems überlebt.

Linux | OSBN

ncdu - du (Disk Usage) mit ncurses

Der Befehl du ist vermutlich vielen Nutzern von Linux ein Begriff. Damit lässt sich die Speicherbelegung eines Verzeichnis anzeigen.

ncdu1

Alternativ dazu kann man auch ncdu nutzen. Hiermit werden nicht alle Unterverzeichnisse auf einen Schlag angezeigt, sondern nur die oberste Ebene. Mittels den Pfeil- und noch ein paar anderen Tasten kann man dann in den Unterverzeichnissen “browsen”.

ncdu2
Linux | OSBN

Verzeichnisstruktur ohne Dateien kopieren

Folgendes bekam ich die Tage als Aufgabenstellung. Eine Bekannte von mir hat auf einer Festplatte ein Hauptverzeichnis. Darin enthalten sind Unterverzeichnisse. In diesen sind ebenfalls Unterverzeichnisse usw. In manchen Verzeichnissen liegen Dateien in manchen nicht. Gewünscht war nun, die ganze Verzeichnisstruktur exklusive der Dateien in ein neues Hauptverzeichnis auf einer anderen Platte zu packen. Das ganze möglichst automatisch, da ein erster manueller Versuch wohl frustriert aufgegeben wurde (sehr viele Verzeichnisse und viele Dateien).

Gelöst habe ich ganze wie folgt (mit der Konsole war ich bereits auf dem betreffenden Mountpoint der Festplatte mit den Verzeichnissen inkl. der Dateien).

cd Hauptverzeichnis 
find . -type d -exec mkdir -p /mountpoint_der_neuen_platte/Hauptverzeichnis{} ';'

Und schon wurde auf der neuen Platte ein Hauptverzeichnis mit den ganzen Unterverzeichnissen exklusive der Dateien erstellt.

Linux | OSBN

Entferntes Verzeichnis über SSH lokal mounten

Ich arbeite recht oft mit SSH, um auf andere Rechner zuzugreifen. Ab und zu finde ich es recht angenehm, wenn ich ein Verzeichnis, dass eigentlich auf einem Server liegt, lokal mounten kann. Mit sshfs ist das kein Problem.

Erst einmal erstellt man sich auf dem Rechner, vor dem man sitzt, an einer Stelle an der man Lese- und Schreibzugriff hat ein Verzeichnis. Am besten im eigenen Home-Verzeichnis.

mkdir sshfs

Das Verzeichnis muss nicht zwangsläufig sshfs heißen. Einfach einen Namen angeben, mit dem man etwas anfangen kann.

Nun muss man eigentlich nur noch das gewünschte Verzeichnis des entfernten Rechners in dieses Verzeichnis mounten. Hierzu reicht ein recht simpler Befehl.

sshfs $Benutzername@$Rechner:/Verzeichnis/auf/dem/Rechner sshfs

Bei $Benutzername muss man den Benutzernamen angeben, mit dem man sich auf dem entfernten Rechner mit SSH einloggen kann. $Rechner ist der Name/IP des entfernten Rechners. Und /Verzeichnis/auf/dem/Rechner ist eben das Verzeichnis auf dem entfernten Rechner, dass man lokal mounten will. Sshfs ist das Verzeichnis, dass wir gerade eben lokal angelegt haben.

Wechselt man nun in das lokal angelegte Verzeichnis findet man dort den Inhalt des entfernten Verzeichnisses vor und kann damit arbeiten, wie wenn alles lokal vorhanden wäre. Nur mit einer kleinen Ausnahme. Es gibt oft eine kleine Verzögerung, wenn man z. B. in ein Unterverzeichnis wechselt.

Aushängen kann man das Verzeichnis wieder, in man einfach folgenden Befehl absetzt.

fusermount -u ~/sshfs

Linux | OSBN

Datei nach dem Verzeichnisnamen umbenennen

Vor kurzem gab es eine Anfrage in einem Forum, wie man eine Datei in einem Verzeichnis unkompliziert umbenennen kann, dass der Dateiname danach dem des Verzeichnisses entspricht. Nehmen wir also mal an, dass die Datei aufnahme1.mkv heißt und das Verzeichnis Mein_bester_Urlaubsfilm.

Mittels folgendem Befehls wird nach Dateien mit der Endung .mkv gesucht. Wird eine oder mehrere Dateien gefunden, wird nachgesehen wie der Verzeichnisname lautet und die Datei dementsprechend umbenannt. Das klappt natürlich auch mit anderen Dateien. Hierzu einfach das .mkv im Befehl entsprechend der Anforderungen umbenennen.

find . -name \*.mkv -exec mv '{}' ${PWD##*\/}.mkv \;

Mit diesem Befehl wird nun aus aufnahme1.mkv im Verzeichnis Mein_bester_Urlaubsfilm die Datei Mein_bester_Urlaubsfilm.mkv.

Wer eine bessere Lösung hat, kann diese gerne hier angeben.

Linux | OSBN