假设你有一个 POSIX shell,你可以这样做:
mv() {
eval "DEST=\${$#}" #The destination is the last positional parameter
if [ -e "$DEST" ] && ! [ -d "$DEST" ];then
PREFIX=${DEST%.*}
COUNT=1
EXT=${DEST##*.}
args= i=1
while [ $i -lt $# ]; do args="$args \"\${$i}\"" i=$((i+1)); done
DEST="$NAME-"$(printf "%03d" $COUNT)".$EXT"
while [ -e "$DEST" ];do
COUNT=$((COUNT+1))
DEST="$NAME-"$(printf "%03d" $COUNT)".$EXT"
done
eval "command mv $args \"\$DEST\""
else
command mv "$@"
fi
}
Run Code Online (Sandbox Code Playgroud)
如何使用这个
这是一个函数,因此将其保存在您的文件中~/.bashrc
并像平常一样调用它mv
。
这是做什么的
mv
可执行文件的路径存储在MV
变量中DEST
DEST
存在且不是目录,则此函数假定您的重命名试图破坏文件.
,标记扩展名)、扩展名(在 final 之后的任何内容).
)、计数(如果有的话;在 final 之后的前缀中的任何内容-
)。mv a.txt b.txt
会先尝试mv a.txt b-001.txt
. 下一个mv
调用也必须是函数本身,因为如果b-001.txt
也存在,我们希望不断增加计数器,直到找到不存在的新文件名。mv
可执行文件将使用您的原始参数调用。注意事项
foo-001.txt
,它将被移动到foo-001-001.txt
.笔记
3
请将printf
语句中的更改为您喜欢的任何内容。