commit 37734a537eacb06ff14517a2e7d6d610046c433a parent 2d7aa6bd8fe103d726bb781bed6b353a185db283 Author: breadcat <breadcat@users.noreply.github.com> Date: Mon, 26 Jan 2026 15:57:35 +0000 Add duplicate filename script Diffstat:
| M | machines/ilias.nix | | | 1 | + |
| A | scripts/duplicate-filenames.nix | | | 63 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/machines/ilias.nix b/machines/ilias.nix @@ -31,6 +31,7 @@ let machine = "ilias"; in { ../scripts/blog-weight.nix ../scripts/ctimerename.nix ../scripts/duupmove.nix + ../scripts/duplicate-filenames.nix ../scripts/overtid.nix ../scripts/payslips.nix ../scripts/phone-dump.nix diff --git a/scripts/duplicate-filenames.nix b/scripts/duplicate-filenames.nix @@ -0,0 +1,63 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = [ + (pkgs.writeShellScriptBin "duplicate-filenames" '' + set -euo pipefail + + usage() { + echo "Usage: $0 [-r] <dir1> <dir2>" + echo " -r Search recursively" + exit 1 + } + + recursive=false + + while getopts ":r" opt; do + case "$opt" in + r) recursive=true ;; + *) usage ;; + esac + done + shift $((OPTIND - 1)) + + [[ $# -eq 2 ]] || usage + + dir1=$1 + dir2=$2 + + [[ -d "$dir1" && -d "$dir2" ]] || { + echo "Both arguments must be directories." + exit 1 + } + + run_find() { + local dir=$1 + if $recursive; then + find "$dir" -type f -print0 + else + find "$dir" -maxdepth 1 -type f -print0 + fi + } + + declare -A files1 + + while IFS= read -r -d "" file; do + base=''${file##*/} + files1["$base"]+="$file +" + done < <(run_find "$dir1") + + while IFS= read -r -d "" file; do + base=''${file##*/} + matches=''${files1["$base"]:-} + [[ -n "$matches" ]] || continue + + while IFS= read -r match; do + [[ -n "$match" ]] || continue + printf "MATCH:\n %s\n %s\n\n" "$match" "$file" + done <<< "$matches" + done < <(run_find "$dir2") + '') + ]; +}