The Living Thing / Notebooks :

Unix commands I need often

but which are tedious to work out

General, not OSX-specific or linux-specific, and see also shell scripting to yak-shave your way into who other shell paradigms or….

Meta-command-lines

Command lines to command your command lines:

OK, time for actual commands I need to remember now…

I suppose if I were a good person I’d submit the following to tldr or bro pages or version my .cheats folder in my dotfile repo, but I’m now exhausted and just want to go home.

Surviving bash

bash history

Media file commands

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):

./shrinkpdf.sh 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 \
  192.168.0.1:/path/to/stuff/ /Volumes/syncdrive/

Renames and copies

files extension munging in bash

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

or:

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, actually don’t do that in naked shell. Use…

Rename

rename is a script that makes renaming work how you imagine it should.

rename -s html txt *.html

Misc

Trailing whitespace

A shell script to remove trailing whitespace from a file - put this in trimspace.sh:

#!/bin/bash
# OSX version
sed -i '' -e's/[[:space:]]*$//' "$1"
#!/bin/bash
# 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 {} trimspace.sh \{\}