Krolyxon
Commit 8dcf980

Branches

Refs →

dotfiles-x11.localbinvimv

44 lines · 1.1 KB · Bourne Again Shell (bash)

1#!/usr/bin/env bash
2set -eu
3
4# Lists the current directory's files in Vim, so you can edit it and save to rename them
5# USAGE: vimv [file1 file2]
6# https://github.com/thameera/vimv
7
8declare -r FILENAMES_FILE=$(mktemp "${TMPDIR:-/tmp}/vimv.XXX")
9
10trap '{ rm -f "${FILENAMES_FILE}" ; }' EXIT
11
12if [ $# -ne 0 ]; then
13 src=( "$@" )
14else
15 IFS=$'\r\n' GLOBIGNORE='*' command eval 'src=($(ls))'
16fi
17
18for ((i=0;i<${#src[@]};++i)); do
19 echo "${src[i]}" >> "${FILENAMES_FILE}"
20done
21
22${EDITOR:-vi} "${FILENAMES_FILE}"
23
24IFS=$'\r\n' GLOBIGNORE='*' command eval 'dest=($(cat "${FILENAMES_FILE}"))'
25
26if (( ${#src[@]} != ${#dest[@]} )); then
27 echo "WARN: Number of files changed. Did you delete a line by accident? Aborting.." >&2
28 exit 1
29fi
30
31declare -i count=0
32for ((i=0;i<${#src[@]};++i)); do
33 if [ "${src[i]}" != "${dest[i]}" ]; then
34 mkdir -p "$(dirname "${dest[i]}")"
35 if git ls-files --error-unmatch "${src[i]}" > /dev/null 2>&1; then
36 git mv "${src[i]}" "${dest[i]}"
37 else
38 mv "${src[i]}" "${dest[i]}"
39 fi
40 ((++count))
41 fi
42done
43
44echo "$count" files renamed.