Login schließen
Hinweis: In Ihrem Browser müssen Cookies und JavaScript aktiviert sein!
Login login

Hier schreibe ich Linux-Shell-Kommandos auf, die sich als nützlich erwiesen haben und die ich später vielleicht noch mal brauche. Diese Seite ist vor allem als Erinnerungshilfe für mich selbst gedacht. Wenn sie auch anderen hilft – um so besser.

 

konvertiere wma zu mp3 128kb/s

mkdir out
for i in *.wma
do
   mplayer -ao pcm:file=temp.wav "$i"
   lame -h -b 128 temp.wav "./out/$(echo $i | sed s/\\.wma/.mp3/)"
done
rm temp.wav

konvertiere mp3 zu ogg 160kb/s

mkdir out
for i in *.mp3
do
   mplayer -ao pcm:file=temp.wav "$i"
   oggenc -b 160 -o "./out/$(echo $i | sed s/\\.mp3/.ogg/)" temp.wav
done
rm temp.wav

konvertiere flac zu ogg 160kb/s

# oggenc kann *.flac direkt lesen, umwandeln nach wav ist nicht nötig
for i in *.flac
do
   oggenc -b 160 -o "ogg/$(echo $i | sed s/\\.flac/.ogg/)" "$i"
done

konvertiere wav zu flac, mit Unterordnern

find original -name "*.wav" |
while read i
do
   filename="neu/$(echo $i | sed s/\\.wav/.flac/)"
   mkdir -p "$(dirname "$filename")"
   flac -V --best -o "$filename" "$i"
done

Umlaute und andere "gefährliche" Zeichen aus einem Dateinamen entfernen (UTF-8-Dateisystem)

detox -s utf_8 Dateiname

Xorg: Bildschirm 45° drehen

xrandr --output <screen name> --transform 1.3,-1.3,<horizontal screen size/2>,1.3,1.3,-<horizontal screen size/2>,0,0,1 --fb <horizontal screen size>x<vertical screen size>

Neuer Mimetyp mit Programm und Icon (Beispiel: Celtx)

/usr/local/share/mime/packages/celtx.xml (Zuordnung Dateiendung - Mimetyp):
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
 <mime-type type="application/celtx-project">
   <comment>Celtx project file</comment>
   <glob pattern="*.celtx"/>
 </mime-type>
</mime-info>
/usr/local/share/applications/celtx.desktop (Zuordnung Mimetyp - Symbol und Programm):
[Desktop Entry]
Encoding=UTF-8
Name=Celtx
Exec=/opt/celtx/celtx
Icon=/usr/local/share/icons/hicolor/48x48/mimetypes/application-celtx-project.png
MimeType=application/celtx-project
Icon kopieren:
cp /opt/celtx/chrome/icons/default/default48.png /usr/local/share/icons/hicolor/48x48/mimetypes/application-celtx-project.png
Cache aktualisieren;
update-mime-database /usr/local/share/mime
update-desktop-database /usr/local/share/applications
update-icon-caches /usr/local/share/icons/hicolor

Auf einem TCP-Port Daten entgegennehmen und an einen Unix-Socket weiterleiten

socat UNIX-CONNECT:/path/to/socket TCP-LISTEN:8040

Dateien von Source nach Destination kopieren, Dateiattribute behalten, Dateien löschen, die in Source nicht vorhanden sind, Dateien überspringen, wenn Größe übereinstimmt

rsync -a --delete --progress --size-only <source> <destination>

Video als Einzelbilder abspeichern

mplayer -vo png:z=4 video.mov

Standbild und Musik zu einem Video kombinieren (z.B. um Musik auf youtube hochzuladen)

ffmpeg -loop 1 -i black.png -i in.wav -shortest -vb 3000k -ab 320k out.avi

Audio dabei nicht neu codieren

ffmpeg -loop 1 -i black.png -i in.mp3 -shortest -vb 3000k -acodec copy out.avi

Finde alle Ordner im aktuellen Verzeichnis, die nicht auf einen bestimmten Regex passen

find . -maxdepth 1 -mindepth 1 -not -regex ".*-neu" -type d

Git: lokale Änderungen in Branch master verwerfen, andere lokale Branches löschen, ungetrackte Dateien löschen

git checkout master
git branch | grep -v "master" | xargs git branch -D
git fetch origin
git reset --hard origin/master
git clean -dfx

Dateien rekursiv umbenennen: *.htm zu *.html

find . -name "*.htm" -print0 |
tr "\0\n" "\n\0" |
sed -e "p;s/htm$/html/" |
tr "\0\n" "\n\0" |
xargs -0 -r -n2 mv -v

Das NULL-Zeichen ist das einzige Zeichen, das in Unix-Pfaden nicht erlaubt ist. Deshalb wird es als Trennzeichzen verwendet (Parameter -print0 und -0). sed kann nur das Linefeed-Zeichen als Trennzeichen verwenden, darum werden NULL und Linefeed vor dem Aufruf von sed getauscht und anschließend wieder zurückgetauscht.
sed gibt mit dem p-Kommando den unveränderten Dateipfad und mit dem s-Kommando den veränderten Dateipfad aus. Durch den Parameter -n2 gibt xargs immer zwei Argumente an mv weiter.
Der erste Parameter von find gibt das Verzeichnis an, in dem nach Dateien gesucht wird.

Ein Verzeichnis rekursiv per FTP herunterladen, vorhandene Dateien nicht erneut runterladen

$ lftp
~> set ftp:ssl-force on
~> set ftp:ssl-protect-data on
~> set ssl:verify-certificate no
~> set ftp:charset ISO8859-15
~> open -u username host
~> mirror -veP 10 /
~> quit

Das Verzeichnis / vom Server wird in das aktuelle lokale Verzeichnis kopiert. Dabei werden Dateien übersprungen, die in Größe und Datum übereinstimmen. Dateien, die nur lokal existieren, werden gelöscht.

Wenn Dateien noch mal runtergeladen werden, obwohl sie sich nicht geändert haben, hilft eventuell --only-newer als Parameter für mirror. Zum Testen ist --dry-run hilfreich.

Löschen rückgängig machen (ext3/ext4)

Zunächst so schnell wie möglich die entsprechende Partition unmounten, damit die gelöschten Dateien nicht überschrieben werden:

sudo umount /dev/DEVICE

Falls die Partition noch benutzt werden muss, geht auch ein readonly-Remount:

sudo mount -o remount,ro /dev/DEVICE

Anschließend können die gelöschten Dateien mit ext4magic auf eine andere Partition gesichert werden:

sudo ext4magic -r /dev/DEVICE -f /Pfad/zur/gelöschten/Datei -d /Pfad/zum/Zielverzeichnis/

/Pfad/zur/gelöschten/Datei kann dabei auch ein Verzeichnis sein, das rekursiv wiederhergestellt werden soll. Der Pfad muss relativ zur Dateisystem-Wurzel angegeben werden.

Um den Pfad der gelöschten Dateien zu finden, kann man debugfs nutzen:

$ sudo debugfs /dev/DEVICE
debugfs: ls -ld
debugfs: cd Verzeichnis
debugfs: pwd
debugfs: quit

Der Parameter -d beim ls-Befehl sorgt dafür, dass auch gelöschte Dateien angezeigt werden. -l sorgt für eine schönere Darstellung.

Manchmal werden bei Angabe eines Verzeichnisses nicht alle Dateien wiederhergestellt. Dann hilft es, diese Dateien einzeln wiederherzustellen.

Löschen rückgängig machen (fat32)

Zunächst so schnell wie möglich die entsprechende Partition unmounten, damit die gelöschten Dateien nicht überschrieben werden:

sudo umount /dev/DEVICE

Anschließend testdisk als root starten:

sudo testdisk

Nacheinander folgende Menüpunkte wählen:

[ No Log ]
Gerät auswählen, [ Proceed ]
Partitionstyp auswählen (meist [ None ])
[ Advanced ]
Partition auswählen, [ Undelete ]

Nun können die gewünschten Dateien ausgewählt und wiederhergestellt werden.
 

Prüfen, ob ein Dienst auf $port aktiv ist (TCP, IPv4)

ss -lt4 '( sport = :'${port}' )' | grep -c LISTEN

Webseite rekursiv herunterladen (mit Login)

wget -r -l 100 -p -E -k --post-data 'user=Alice&pass=12345' -X /exclude_this_folder https://www.example.de/login

Audio-Dateien ohne Neukodierung zusammenfügen

Die Dateien müssen dafür mit den gleichen Einstellungen (Bitrate usw.) kodiert sein.

ffmpeg -f concat -safe 0 -i <(for f in ./*.mp3; do echo "file '$PWD/$f'"; done) -c copy output.mp3

Cover-Bild aus einer mp3-Datei extrahieren

exiftool -Picture -b audio.mp3 > cover.jpg

Cover-Bild zu einer mp3-Datei hinzufügen

mid3v2 --picture="cover.jpg:Dies ist das Cover-Bild:3:image/jpeg" audio.mp3

„Dies ist das Cover-Bild“ ist der Beschreibungstext des Bildes und kann frei gewählt werden. Die 3 gibt an, dass es sich um das Cover-Bild handelt. Die vollständige Liste der Bild-Typen findet sich hier: https://mutagen.readthedocs.io/en/latest/api/id3.html#mutagen.id3.PictureType

Falls bereits ein Bild in der Datei vorhanden ist, wird dieses nicht überschrieben, stattdessen sind dann zwei Bilder in der Datei. Um das alte Bild vorher zu entfernen kann folgender Befehl genutzt werden:

mid3v2 --delete-frames=APIC audio.mp3

SSH-Verbindung zu einem alten Server

ssh -oHostKeyAlgorithms=+ssh-rsa user@example.com
rsync -e 'ssh -oHostKeyAlgorithms=+ssh-rsa' user@example.com:/source/ /destination/

Dateien anhand der Exif-Daten umbenennen

exiftool '-filename<CreateDate' -d IMG_%Y%m%d_%H%M%S%%-c.%%le ./

Alle Dateieien im aktuellen Verzeichnis werden nach dem Muster IMG_YYYYMMDD_HHMMSS.ext umbenannt. Bei Bedarf wird ein Zähler angehängt. Die Dateiendung wird in Kleinbuchstaben umgewandelt.
Siehe auch: https://www.joelotz.com/blog/2022/bulk-rename-photos-to-date-taken-with-exiftool.html

Leere Verzeichnisse rekursiv löschen

find . -type d -empty -delete