The Living Thing / Notebooks : Commands I need often but which are tedious to work out

General, not OSX-specific or linux-specific, and see also shell scripting, and the vast online repository, commandlinefu. Or howdoi, the command line command line.

Media files

Reduce size of bloated PDF:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/ebook \
  -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

or, wrapped up into a nice little script, ShrinkPDF (infile, outfile, dpi):

./ in.pdf out.pdf 90

This works to concatenate PDFs:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite \
  -dPDFSETTINGS=/prepress -sOutputFile=output.pdf input*.pdf

Speaking of concatenation, here’s how to concatenate photos into low-framerate movie from IMG_5815 and subsequent sequential shots:

ffmpeg -framerate 3 -start_number 5815 -i IMG_%04d.jpg -c:v libx264 \
  -pix_fmt yuv420p -c:a copy ../outfile.m4v

Erase all (or most) of the explicit metadata from an image (as per my media metadata page):

exiftool -all= filename.jpg

sync only if drive present

test -d  /Volumes/syncdrive/ && rsync --delete \
  --iconv=UTF8-MAC,UTF-8 -avz \ /Volumes/syncdrive/

Renames and copies

files extension munging in bash

mv "$file" "`basename $file .html`.txt"


mv "$file" "${file%.html}.txt"

Don’t forget the quotes, or it will explode when you have spaces in your filenames and delete stuff that you loved. (I hate bash so hard. I should probably abandon it.)


No, don’t do that in naked shell. Use rename.

rename -s html txt *.html


Sensible history search from the shell in .inputrc:

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off

"\ep": history-search-backward
"\en": history-search-backward
"\e[A": history-search-backward
"\e[B": history-search-forward

$if Bash
  Space: magic-space

A shell script to remove trailing whitespace from a file - put this in

# OSX version
sed -i '' -e's/[[:space:]]*$//' "$1"
# GNU version
sed -i -e's/[ \t]*$//' "$1"

Then you can trim trailing whitespace from your… whatever… by putting this line in there:

find . -type f -print0 | xargs -0 -I {} \{\}


Yes, it’s handy if you need to run terminals somewhere.

Here are some helpful intros to tmux: 1, 2.