You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
4.9 KiB
169 lines
4.9 KiB
#!/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 <file>
|
|
# 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 <input_movie.mov>. 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
|
|
}
|
|
|