From: José Luis Neder Date: Tue, 3 Dec 2019 13:00:44 +0000 (-0300) Subject: Plugin renamer (#393) X-Git-Tag: v2.8~3 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=189042d2d906c386f62939e6dec458d9ccd37052;p=nnn.git Plugin renamer (#393) This plugin is an alternative to the native batch rename interface in nnn. qmv from renameutils and vidir from moreutils allow to rename files without fear of replacing existing files. --- diff --git a/plugins/README.md b/plugins/README.md index cb5b8974..17f57506 100644 --- a/plugins/README.md +++ b/plugins/README.md @@ -14,6 +14,7 @@ Plugins extend the capabilities of `nnn`. They are _executable_ scripts (or bina | Plugin (a-z) | Description | Lang | Deps | | --- | --- | --- | --- | +| renamer | Batch rename files with qmv or vidir | sh | [renameutils](https://www.nongnu.org/renameutils/) or [moreutils](https://joeyh.name/code/moreutils/) | | boom | Play random music from dir | sh | [moc](http://moc.daper.net/) | | dups | List non-empty duplicate files in current dir | sh | find, md5sum,
sort uniq xargs | | chksum | Create and verify checksums | sh | md5sum,
sha256sum | diff --git a/plugins/renamer b/plugins/renamer new file mode 100755 index 00000000..5dc82715 --- /dev/null +++ b/plugins/renamer @@ -0,0 +1,41 @@ +#!/usr/bin/env sh + +# Description: Batch rename selection or current directory with qmv +# +# Notes: +# - Try to mimic current batch rename functionality but with correct +# handling of edge cases by qmv or vidir. +# Qmv opens with hidden files if no selection is used. Selected +# directories are shown. +# Vidir don't show directories nor hidden files. +# +# Shell: POSIX compliant +# Author: José Neder + +selection=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection + +if command -v qmv >/dev/null 2>&1; then + batchrenamesel="qmv -fdo -da" + batchrename="qmv -fdo -a" +elif command -v vidir >/dev/null 2>&1; then + batchrenamesel="vidir" + batchrename="vidir" +else + printf "there is not batchrename program installed." + exit +fi + +if [ -s "$selection" ]; then + printf "rename selection? " + read -r resp +fi + +if [ "$resp" = "y" ]; then + # -o flag is necessary for interative editors + xargs -o -0 $batchrenamesel < "$selection" +elif [ ! "$(LC_ALL=C ls -a)" = ". +.." ]; then + # On older systems that don't have ls -A + $batchrename +fi +