#!/bin/bash -e # interactive diff with pagination and nice coloring declare -a files while test $# -gt 0 do test "$1" == "--" && shift && command="$@" && break files+=("$1") shift done { if ! test "$command"; then mime="$(file --brief --mime "${files[@]}")" case "$mime" in (*audio*) command="ffprobe -loglevel warning -print_format default=noprint_wrappers=1 -show_format -pretty";; (image/*) command="exiftool";; (*sqlite*) sqldiff --summary "${files[@]}" | grep -v '0 changes, 0 inserts, 0 deletes';; # TODO syntax highlighting for INSERT/UPDATE/DELETE (text/*) # Use wiked-diff only for text <100KB if test 100000 -gt "$(stat --format=%s "${files[@]}" | paste -s -d'+' | bc)" then wiked-diff "${files[@]}" else diff --color=always --unified=1 --report-identical-files "${files[@]}" fi;; (*) diff-color --report-identical-files "${files[@]}";; esac fi if test "$command"; then echo "Generated through $command" $(test $(tput cols) -gt 120 && echo "diff --color=always --side-by-side" || echo "diff-color") \ --report-identical-files --label="${files[0]}" --label="${files[1]}" <($command "${files[0]}") <($command "${files[1]}") fi } | less --RAW-CONTROL-CHARS --quit-on-intr --quit-if-one-screen