From 67a1c24a8661fdcbc48f72f7b65521772065d305 Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Sat, 28 Feb 2026 21:52:26 +0200 Subject: dfm: add ranger style bulk rename Also the ability to embed scripts within dfm. --- script/bulk-rename | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100755 script/bulk-rename (limited to 'script/bulk-rename') diff --git a/script/bulk-rename b/script/bulk-rename new file mode 100755 index 0000000..3bd6c85 --- /dev/null +++ b/script/bulk-rename @@ -0,0 +1,47 @@ +#!/bin/sh -eu +# +# Interactive bulk file rename using $EDITOR. +# +# Copyright (c) 2026 Dylan Araps +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +case $# in 0) exit; esac +f=${TMPDIR:=/tmp}/.dfm-brn-$$-$# +e() { rm -f "$f" || :; exit "$1"; } +( + printf '%s\n' "$@" > "$f" && + "${EDITOR:=vi}" "$f" && + exec 3<"$f" && + for _ do + IFS= read -r l <&3 + set -- "$@" "mv -f -- '$1' '${l:?line mismatch in rename file}'" + shift + done && { + read -r l <&3 && { + echo "$0: 39: line mismatch in rename file" >&2 + return 1 + } + printf '%s\n' '# This file will be executed when the editor is closed.' \ + '# Clear the file to abort.' "$@" + } > "$f" && + "$EDITOR" "$f" && . "$f" && e 0 +) || e 1 + -- cgit v1.2.3