13a0ab0b7Sclaudio#! /bin/sh 23a0ab0b7Sclaudio 33a0ab0b7Sclaudioset -u 43a0ab0b7Sclaudioset -e 53a0ab0b7Sclaudio 63a0ab0b7Sclaudio# Library of functions. 73a0ab0b7Sclaudio# Intended to be sourced by scripts (or interactive shells if you want). 83a0ab0b7Sclaudio 93a0ab0b7Sclaudiogenfile_stdout_16m () 103a0ab0b7Sclaudio{ 113a0ab0b7Sclaudio seq -f%015g 1048576 123a0ab0b7Sclaudio} 133a0ab0b7Sclaudiogenfile_stdout_1m () 143a0ab0b7Sclaudio{ 153a0ab0b7Sclaudio seq -f%015g 65536 163a0ab0b7Sclaudio} 173a0ab0b7Sclaudiogenfile () 183a0ab0b7Sclaudio{ 193a0ab0b7Sclaudio #touch "$1" 203a0ab0b7Sclaudio genfile_stdout_1m > "$1" 213a0ab0b7Sclaudio} 223a0ab0b7Sclaudio 233a0ab0b7Sclaudio# makes a directory path and optionally a file in it. 243a0ab0b7Sclaudio# if you want the last element to be a directory, add / at the end 253a0ab0b7Sclaudiomkdirfile () 263a0ab0b7Sclaudio{ 273a0ab0b7Sclaudio case "$1" in 283a0ab0b7Sclaudio '') error that cannot work;; 293a0ab0b7Sclaudio */) mkdir -p "$1";; 303a0ab0b7Sclaudio */*) mkdir -p "${1%/*}"; genfile "$1";; 313a0ab0b7Sclaudio *) genfile "$1";; 323a0ab0b7Sclaudio esac 333a0ab0b7Sclaudio} 343a0ab0b7Sclaudio 353a0ab0b7Sclaudiomkdirsymlink () 363a0ab0b7Sclaudio{ 373a0ab0b7Sclaudio ( 383a0ab0b7Sclaudio mkdir -p "$1" 393a0ab0b7Sclaudio cd "$1" 403a0ab0b7Sclaudio ln -sf "$2" "$3" 413a0ab0b7Sclaudio ) 423a0ab0b7Sclaudio} 433a0ab0b7Sclaudio 443a0ab0b7Sclaudio# make a first interesting tree 453a0ab0b7Sclaudiogenerate_tree_1 () 463a0ab0b7Sclaudio{ 473a0ab0b7Sclaudio mkdirfile foo/bar/baz/one.txt 483a0ab0b7Sclaudio mkdirfile foo/bar/baz/one2.txt 493a0ab0b7Sclaudio mkdirfile 'foo/bar/baz/ two.txt' 503a0ab0b7Sclaudio mkdirfile 'foo/bar/baz/two 2.txt' 513a0ab0b7Sclaudio mkdirfile 'foo/bar/baz/two3.txt ' 523a0ab0b7Sclaudio mkdirsymlink foo/baz/ ../bar/baz/one.txt three.txt 533a0ab0b7Sclaudio mkdirfile one/two/three/four.txt 543a0ab0b7Sclaudio mkdirfile foo/five/one/two/five/blah.txt 553a0ab0b7Sclaudio mkdirfile foo/one/two/five/blah.txt 563a0ab0b7Sclaudio} 573a0ab0b7Sclaudio 583a0ab0b7Sclaudio# a frontend for find 593a0ab0b7Sclaudio# first argument is a dir to chdir to 603a0ab0b7Sclaudiofindme () 613a0ab0b7Sclaudio{ 623a0ab0b7Sclaudio if [ $# -lt 2 ] ; then 633a0ab0b7Sclaudio echo usage: different 1>&2 643a0ab0b7Sclaudio return 1 653a0ab0b7Sclaudio fi 663a0ab0b7Sclaudio ( 673a0ab0b7Sclaudio cd "$1" ; shift 68a8f40aaaSanton # Remove unstable fields: 69a8f40aaaSanton # 1: inode 70a8f40aaaSanton # 2: size in blocks 71a8f40aaaSanton # 8-10: last modification time 72a8f40aaaSanton find "$@" -ls | 73*b6cae74bSanton sed -e 's/^[[:space:]]*//' -e 's/[[:space:]][[:space:]]*/ /g' | 74a8f40aaaSanton cut -d ' ' -f 3-7,11- | 75a8f40aaaSanton sort 763a0ab0b7Sclaudio ) 773a0ab0b7Sclaudio} 783a0ab0b7Sclaudio 793a0ab0b7Sclaudio# compare two trees. This will later be modular to pick between: 803a0ab0b7Sclaudio# - diff 813a0ab0b7Sclaudio# - find . -print0 | sort --zero-terminated | xargs -0 tar fc foo.tar 823a0ab0b7Sclaudio# - mtree 833a0ab0b7Sclaudiocompare_trees () 843a0ab0b7Sclaudio{ 853a0ab0b7Sclaudio if [ $# -ne 2 ] ; then 863a0ab0b7Sclaudio echo usage: different 1>&2 873a0ab0b7Sclaudio return 1 883a0ab0b7Sclaudio fi 893a0ab0b7Sclaudio # files_and_permissions 903a0ab0b7Sclaudio findme "$1" . > find1 913a0ab0b7Sclaudio findme "$2" . > find2 923a0ab0b7Sclaudio diff -u find[12] 933a0ab0b7Sclaudio # file contents 943a0ab0b7Sclaudio diff -ru "$1" "$2" 953a0ab0b7Sclaudio} 96