diff options
| author | Dylan Araps <dylan.araps@gmail.com> | 2026-02-28 21:52:26 +0200 |
|---|---|---|
| committer | Dylan Araps <dylan.araps@gmail.com> | 2026-02-28 21:52:26 +0200 |
| commit | 67a1c24a8661fdcbc48f72f7b65521772065d305 (patch) | |
| tree | 33c1fbfe2452c23773de046b1127f4920aa5a49f /script/bulk-rename | |
| parent | 4fb29c95c61256f78e4b501a3c550b4c92a92a4e (diff) | |
dfm: add ranger style bulk rename
Also the ability to embed scripts within dfm.
Diffstat (limited to 'script/bulk-rename')
| -rwxr-xr-x | script/bulk-rename | 47 |
1 files changed, 47 insertions, 0 deletions
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 + |