Hacks
Image renaming by create date
When you have a bunch of files from your old Android phone with a timestamp filename (e.g. 1388042328550.jpg), you can rename them thus:
for f in 1*.jpg; do mv $f $(date +IMG_%Y%m%d_%H%M%S.jpg -d @$(echo $f|cut -c 1-10)) done
Otherwise, we can fish out the Create Date from the EXIF data, using exiftool:
exiftool '-FileName<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e .
Use etckeeper
It saves your bacon. Store changes to the /etc
directory in git, uses hooks to commit changes when packages are updated, puppet runs, etc. Stash your own changes with useful commit messages. Look up stuff in history when something goes wrong, figure out what changes happened when packages are added or updated.
Fix the daily commit bug
Unfortunately since about 18.04 there is a bug where a systemd timer and a cron.daily task compete to commit a daily commit if needed; unfortunately one of them doesn't bother to check the etckeeper.conf
file to see whether you've disabled it. If you have {{{1}}}
in your config file, then you probably don't want daily auto commits. If this is so, run this to disable the systemd timer:
systemctl disable --now etckeeper.timer
Repair broken or rotated phone videos
You can fix broken video .tmp files from your Android phone using untrunc. This will create a fixed.mp4 file in cwd:
untrunc working_video_from_the_same_camera.mp4 broken.mk4.tmp
Did your phone unhelpfully rotate your video? Fix the metadata:
ffmpeg -i original.mp4 -acodec copy -vcodec copy -metadata:s:v:0 rotate=0 unrotated.mp4
Or, did you actually film your shit the wrong way up? You'll need to re-encode it:
ffmpeg -i original.mp4 -acodec copy -vcodec libx264 -crf 20 -metadata:s:v:0 rotate=0 unrotated.mp4
Export your photos
Before uploading your photos, remove all the EXIF tags, and reduce the resolution; nobody needs 5000x4000 pixels, much less corporations hoovering up your stuff to put in adverts.
mkdir tmp for f in $.jpg; do convert -resize 1600x1200 $f tmp/$f exiftool -all= -P -overwrite_original tmp/$f done
Clean out your revoked and expired PGP keys
Spring-clean your gpg database, make it go faster. Just go:
gpg --delete-keys `gpg --list-keys|grep -P 'revoked|expired'|awk -F/ '{print $2}'|awk '{print $1}'`
Obviously. If you can't be arsed confirming each key, add --batch --yes to the first gpg call.
Firefox opening your shit in gedit
I don't know, who thought that was a good idea? Jesus.
sed -i 's#.*octet-stream.*#application/octet-stream=xdg-open#' ~/.local/share/applications/mimeapps.list ~/.config/mimeapps.list
GNOME not sorting your folders first
It's not in a dialog anywhere, and a pretty lame default behaviour.
dconf write /org/gnome/nautilus/preferences/sort-directories-first true
GNOME not dealing with WebP images
I mean, it's 2021 and WebP is only what, ten years old? Jesus. See solution on AskUbuntu.
Restoring huge databases to PostgreSQL
See also: PostgreSQL
Skip some huge tables by dumping the TOC, removing culprit large tables, and restore with the edited TOC, e.g.
pg_restore -l huge.dump > TOC # edit the TOC file... pg_restore -L TOC -d dbname huge.dump
Output PostgreSQL queries to CSV
COPY (SELECT <query> ...) TO STDOUT CSV HEADER;
Turn off the shitty default "visual" mouse mode in vim
Christ. Add this to ~/.vimrc
set mouse-=a
Too many leftover git branches merged into master? Nukem!
This will remove any branches on your local git repo that have been merged to master.
for i in $(for b in $(git branch|grep -v '\*'); do git branch $b --merged master; done); \ do git branch -D $i; \ done
Move your MySQL databases
Used to be you could move your /var/lib/mysql directory somewhere else and symlink it. You can, but in newer distros with Apparmor you'll need to declare it:
# In /etc/apparmor.d/tunables/alias alias /var/lib/mysql/ -> /mnt/wherever/mysql/,
Note the trailing comma.
Split audio CD rips using the cue file
Single-file FLAC or Ape files of a CD can be split up using the .cue file for both the timestamps and the tagging data. Also, install flacon (from a PPA).
sudo apt install shntool shnsplit -o flac cdimage.flac -f cdimage.cue -t '%n.%t'
You may need to do tags again, if they didn't stick:
sudo apt install cuetools cuetag cdimage.cue *.flac