From 782df96080a397d9bccc20fd023c692f86d79371 Mon Sep 17 00:00:00 2001 From: KlzXS Date: Wed, 21 Oct 2020 17:03:03 +0000 Subject: [PATCH] Modified dups to allow selecting files for removal --- plugins/dups | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/plugins/dups b/plugins/dups index 4f31fc6d..aef39230 100755 --- a/plugins/dups +++ b/plugins/dups @@ -6,10 +6,39 @@ # # Dependencies: find md5sum sort uniq xargs # -# Shell: POSIX compliant +# Note: bash compatible required for mktemp +# +# Shell: bash # Authors: syssyphus, KlzXS -find . -size +0 -type f -printf "%s %p\n" | sort -rn | sed -n 'N; /^\([0-9]*\) .*\n\1.*$/p;$d;D' | awk '{printf("%s\0", substr($0, index($0, $2)))}' | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate +# If the size of a file has more that $size_digits digits the file will be misplaced +# 12 digits fit files up to 931GiB + +EDITOR="${EDITOR:-vi}" +TMPDIR="${TMPDIR:-/tmp}" + +size_digits=12 +tmpfile=$(mktemp "$TMPDIR/.nnnXXXXXX") + +# shellcheck disable=SC2016 +find . -size +0 -type f -printf "%${size_digits}s %p\n" | sort -rn | uniq -w"${size_digits}" -D | tr '\n' '\0' | xargs -0 -n1 sh -c 'printf "%s %s\n" "$(md5sum $@)" "d$0"' | sort | { uniq -w32 --all-repeated=separate; echo; } | sed -nE ' +h +s/^(.{32}).* d([0-9]*)$/md5sum: \1 size: \2 bytes/p +g + +:loop +N +/.*\n$/!b loop +p' | sed -E 's/^.{32} (.*) d[0-9]*$/\1/' > "$tmpfile" + +"$EDITOR" "$tmpfile" + +cat "$tmpfile" + +# shellcheck disable=SC2016 +sed -e 's/md5sum.*//' "$tmpfile" | tr '\n' '\0' | xargs -0 sh -c 'rm -i $0 $@ < /dev/tty' + +rm "$tmpfile" printf "Press any key to exit" read -r _