nnn/plugins/cleanfilename

65 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env sh
# Description: Clean filename or dirname (either hovered or selections)
# to be more shell-friendly.
# This script replaces any non A-Za-z0-9._- char
# with underscore (_).
#
# LIMITATION: Won't work with filename that contains newline
#
# Dependencies: sed
#
# Shell: POSIX compliant
# Author: Benawi Adha
prompt=true
sel=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
IFS='
'
cleanup() {
printf "%s" "$1" | sed -e 's/[^A-Za-z0-9._-]/_/g'
}
if [ -s "$sel" ]; then
targets=$(sed -e "s/\\x0/\\n/g;\$a\\" "$sel" | \
while read -r i; do
basename "$i";
done)
else
targets=$1
fi
for i in $targets; do
printf "%s --> %s\n" "$i" "$(cleanup "$i")";
done
if $prompt; then
echo
printf "Proceed [Yn]? "
read -r input
case "$input" in
y|Y|'')
;;
*)
echo "Canceled"
exit
;;
esac
fi
for i in $targets; do
if [ "$i" != "$(cleanup "$i")" ]; then
tmp=''
if [ -e "$(cleanup "$i")" ]; then
tmp='_'
fi
mv "$i" "$tmp$(cleanup "$i")";
fi
done
# Clear selection
if [ -s "$sel" ] && [ -p "$NNN_PIPE" ]; then
printf "-" > "$NNN_PIPE"
fi