#!/bin/bash # Create a new directory and enter it function md() { mkdir -p "$@" && cd "$@" } # find shorthand function f() { find . -name "$1" 2>&1 | grep -v 'Permission denied' } # List all files, long format, colorized, permissions in octal function la(){ ls -l "$@" | awk ' { k=0; for (i=0;i<=8;i++) k+=((substr($1,i+2,1)~/[rwx]/) *2^(8-i)); if (k) printf("%0o ",k); printf(" %9s %3s %2s %5s %6s %s %s %s\n", $3, $6, $7, $8, $5, $9,$10, $11); }' } # cd into whatever is the forefront Finder window. cdf() { # short for cdfinder cd "`osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)'`" } # Start an HTTP server from a directory, optionally specifying the port function server() { local port="${1:-8000}" open "http://localhost:${port}/" # Set the default Content-Type to `text/plain` instead of `application/octet-stream` # And serve everything as UTF-8 (although not technically correct, this doesn’t break anything for binary files) python -c $'import SimpleHTTPServer;\nmap = SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map;\nmap[""] = "text/plain";\nfor key, value in map.items():\n\tmap[key] = value + ";charset=UTF-8";\nSimpleHTTPServer.test();' "$port" } # Copy w/ progress cp_p () { rsync -WavP --human-readable --progress $1 $2 } # qfind - used to quickly find files that contain a string in a directory qfind () { find . -exec grep -l -s $1 {} \; return 0 } # get gzipped size function gz() { echo "orig size (bytes): " cat "$1" | wc -c echo "gzipped size (bytes): " gzip -c "$1" | wc -c } # whois a domain or a URL function whois() { local domain=$(echo "$1" | awk -F/ '{print $3}') # get domain from URL if [ -z $domain ] ; then domain=$1 fi echo "Getting whois record for: $domain …" # avoid recursion # this is the best whois server # strip extra fluff /usr/bin/whois -h whois.internic.net $domain | sed '/NOTICE:/q' } function localip(){ function _localip(){ echo "📶 "$(ipconfig getifaddr "$1"); } export -f _localip local purple="\x1B\[35m" reset="\x1B\[m" networksetup -listallhardwareports | \ sed -r "s/Hardware Port: (.*)/${purple}\1${reset}/g" | \ sed -r "s/Device: (en.*)$/_localip \1/e" | \ sed -r "s/Ethernet Address:/📘 /g" | \ sed -r "s/(VLAN Configurations)|==*//g" } # Extract archives - use: extract # Based on http://dotfiles.org/~pseup/.bashrc function extract() { if [ -f "$1" ] ; then local filename=$(basename "$1") local foldername="${filename%%.*}" local fullpath=`perl -e 'use Cwd "abs_path";print abs_path(shift)' "$1"` local didfolderexist=false if [ -d "$foldername" ]; then didfolderexist=true read -p "$foldername already exists, do you want to overwrite it? (y/n) " -n 1 echo if [[ $REPLY =~ ^[Nn]$ ]]; then return fi fi mkdir -p "$foldername" && cd "$foldername" case $1 in *.tar.bz2) tar xjf "$fullpath" ;; *.tar.gz) tar xzf "$fullpath" ;; *.tar.xz) tar Jxvf "$fullpath" ;; *.tar.Z) tar xzf "$fullpath" ;; *.tar) tar xf "$fullpath" ;; *.taz) tar xzf "$fullpath" ;; *.tb2) tar xjf "$fullpath" ;; *.tbz) tar xjf "$fullpath" ;; *.tbz2) tar xjf "$fullpath" ;; *.tgz) tar xzf "$fullpath" ;; *.txz) tar Jxvf "$fullpath" ;; *.zip) unzip "$fullpath" ;; *) echo "'$1' cannot be extracted via extract()" && cd .. && ! $didfolderexist && rm -r "$foldername" ;; esac else echo "'$1' is not a valid file" fi } # who is using the laptop's iSight camera? camerausedby() { echo "Checking to see who is using the iSight camera… 📷" usedby=$(lsof | grep -w "AppleCamera\|USBVDC\|iSight" | awk '{printf $2"\n"}' | xargs ps) echo -e "Recent camera uses:\n$usedby" } # animated gifs from any video # from alex sexton gist.github.com/SlexAxton/4989674 gifify() { if [[ -n "$1" ]]; then if [[ $2 == '--good' ]]; then ffmpeg -i $1 -r 10 -vcodec png out-static-%05d.png time convert -verbose +dither -layers Optimize -resize 900x900\> out-static*.png GIF:- | gifsicle --colors 128 --delay=5 --loop --optimize=3 --multifile - > $1.gif rm out-static*.png else ffmpeg -i $1 -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > $1.gif fi else echo "proper usage: gifify . You DO need to include extension." fi } # turn that video into webm. # brew reinstall ffmpeg --with-libvpx webmify(){ ffmpeg -i $1 -vcodec libvpx -acodec libvorbis -isync -copyts -aq 80 -threads 3 -qmax 30 -y $2 $1.webm } # visual studio code. a la `subl` code () { if [[ $# = 0 ]] then open -a "Visual Studio Code" else [[ $1 = /* ]] && F="$1" || F="$PWD/${1#./}" open -a "Visual Studio Code" --args "$F" fi } # `shellswitch [bash |zsh]` # Must be in /etc/shells shellswitch () { chsh -s $(brew --prefix)/bin/$1 }