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.pngMimeType=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