#!/bin/bash # Rename files by editing their filenames with $EDITOR # Not robust against filenames with newlines # Todo: Run this through tsort to make simultaenous moves a -> b , b -> c safe. OLDNAMES="$(mktemp)" NEWNAMES="$(mktemp)" if (( $# > 0 )) then ls -di "$@" else ls -i fi | sed 's/^ *//' | tee "$NEWNAMES" > "$OLDNAMES" $EDITOR "$NEWNAMES" while read inode newname;do oldline="$(grep "^$inode " "$OLDNAMES")" oldname="${oldline#* }" if [[ "$oldname" != "$newname" && ! -e "$newname" ]];then mv -v "$oldname" "$newname" fi done < "$NEWNAMES" rm "$OLDNAMES" "$NEWNAMES"