From 4fd519c195161f59b6947ee1412d72c957945790 Mon Sep 17 00:00:00 2001 From: lelgenio Date: Wed, 11 Nov 2020 15:08:36 -0300 Subject: [PATCH] add bulk rename script --- dotfiles/scripts/br | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 dotfiles/scripts/br diff --git a/dotfiles/scripts/br b/dotfiles/scripts/br new file mode 100755 index 0000000..5fb2134 --- /dev/null +++ b/dotfiles/scripts/br @@ -0,0 +1,42 @@ +#!/bin/sh +# Copyright Cédric Picard 2014 -- License WTFPL +# Inspired by Ranger's -- See https://github.com/hut/ranger + +set -e -u + +if [ $# -ne 0 ] ; then + { for i in "$@" ; do printf "%s\n" "$i" ; done } | "$0" + exit $? +fi + +EDITOR="${EDITOR:-vi}" + +namebase="$(mktemp -d)/blkrn" +echo '# Modify filenames without removing any line, quitting aborts' \ + > "${namebase}.2" +tee -- "${namebase}.1" >> "${namebase}.2" +exec /dev/tty \ + || { echo 'Interactive terminal needed' >&2 ; exit 1; } + +"$EDITOR" "${namebase}.2" +sed -i -- '1d' "${namebase}.2" + +if [ $(wc -l < "${namebase}.1") -ne $(wc -l < "${namebase}.2") ] ; then + rm -r -- "$(dirname -- "${namebase}")" + echo "Wrong number of lines" >&2 ; exit 1 +fi + +(echo '# Please review/modify this script or empty it to do nothing' \ + ; while read -r l1 <&3 && read -r l2 <&4; do + [ "$l1" = "$l2" ] || printf "%s\n%s\n" "$l1" "$l2" + done 3<"${namebase}.1" 4<"${namebase}.2" \ + | sed 's/\([\\"$`]\)/\\\1/g;s/^.*$/"&"/' \ + | xargs -d"\n" -L2 echo 'mv -i --') \ + > "${namebase}.sh" + +if [ "$(wc -c < "${namebase}.sh")" -ne 0 ] ; then + "$EDITOR" -- "${namebase}.sh" + sh -e -- "${namebase}.sh" +fi + +rm -r -- "$(dirname "${namebase}")"