YSVVFIOZPL5RQVP63MJXZZ2EYXGAYJ7OC73AOH4IMT45VE4UV5WQC #!/usr/bin/env zshset -e -u -o pipefailzmodload -F zsh/stat b:zstatabspath() {if [ -L "$1" ]; thenlocal linkzstat -A link +link -- "$1" || returncase $link in(/*) ;;(*)case $1:h in(*/) link=$1:h$link;;(*) link=$1:h/$link;;esac;;esacprintf '%s\n' $link:h:A/$link:telseprintf '%s\n' $1:Afi}linkdir=$(abspath "${1?need a link directory}")/srcdir=$(abspath "${2?need a source directory}")/shiftshiftecho deduplicating "$srcdir" to "$linkdir"get_target_directory() {first_level=${1[1,2]}second_level=${1[1,5]}echo "$first_level"/"$second_level"}get_target_path() {dir="$(get_target_directory "$1")"mkdir -p "$linkdir"/"$dir"echo "$linkdir"/"$dir"/"$1"}file_to_hashed_dir() {hash="$(sha256sum "$1" | awk '{print $1}')"get_target_path "$hash"}linkify_tree() {cd "$1"find . -type f | {while read -r fn; doif ! [[ -L "$fn" ]]; thentarget="$(file_to_hashed_dir "$fn")"cp "$fn" "$target"rm "$fn"ln -sv "$target" "$fn"fiechodone}}linkify_tree "$srcdir"
#!/usr/bin/env zshset -e -u -o pipefailzmodload -F zsh/stat b:zstatabspath() {if [ -L "$1" ]; thenlocal linkzstat -A link +link -- "$1" || returncase $link in(/*) ;;(*)case $1:h in(*/) link=$1:h$link;;(*) link=$1:h/$link;;esac;;esacprintf '%s\n' $link:h:A/$link:telseprintf '%s\n' $1:Afi}linkdir=$(abspath "${1?need a link directory}")/srcdir=$(abspath "${2?need a source directory}")/shiftshiftecho deduplicating "$srcdir" to "$linkdir"get_target_directory() {first_level=${1[1,2]}second_level=${1[1,5]}echo "$first_level"/"$second_level"}get_target_path() {dir="$(get_target_directory "$1")"mkdir -p "$linkdir"/"$dir"echo "$linkdir"/"$dir"/"$1"}file_to_hashed_dir() {hash="$(sha256sum "$1" | awk '{print $1}')"get_target_path "$hash"}linkify_tree() {cd "$1"find . -type f | {while read -r fn; doif ! [[ -L "$fn" ]]; thentarget="$(file_to_hashed_dir "$fn")"cp "$fn" "$target"rm "$fn"ln -sv "$target" "$fn"fiechodone}}linkify_tree "$srcdir"