| #!/bin/sh |
| # SPDX-License-Identifier: GPL-2.0 |
| # |
| # Deduplicate files in a given destdir |
| # |
| |
| err() { |
| echo "ERROR: $*" |
| exit 1 |
| } |
| |
| verbose=: |
| destdir= |
| while test $# -gt 0; do |
| case $1 in |
| -v | --verbose) |
| # shellcheck disable=SC2209 |
| verbose=echo |
| shift |
| ;; |
| *) |
| if test -n "$destdir"; then |
| err "unknown command-line options: $*" |
| fi |
| |
| destdir="$1" |
| shift |
| ;; |
| esac |
| done |
| |
| if test -z "$destdir"; then |
| err "destination directory was not specified." |
| fi |
| |
| if ! test -d "$destdir"; then |
| err "provided directory does not exit." |
| fi |
| |
| if ! command -v rdfind >/dev/null; then |
| err "rdfind is not installed." |
| fi |
| |
| $verbose "Finding duplicate files" |
| rdfind -makesymlinks true -makeresultsfile true "$destdir" >/dev/null |
| |
| grep DUPTYPE_WITHIN_SAME_TREE results.txt | grep -o "$destdir.*" | while read -r l; do |
| target="$(realpath "$l")" |
| $verbose "Correcting path for $l" |
| ln --force --symbolic --relative "$target" "$l" |
| done |
| |
| rm results.txt |