如何将前导零添加到连续文件名

How to add leading zero's to sequential file names

我的图像文件在创建时具有以下类型的文件名:

文件名-1.jpg 文件名-2.jpg 文件名-3.jpg 文件名-4.jpg ..等等

这会导致 Windows 和 Cygwin Bash 之间的排序出现问题。当我在 Cygwin Bash 中处理这些文件时,由于 Windows 文件系统和 Cygwin Bash 看到它们之间的排序不同,它们被乱序处理。但是,如果文件被手动重命名并用前导零编号,则此问题不是问题。我怎样才能使用 Bash 自动重命名这些文件,这样我就不必手动处理它们了。我想在我的 Bash 脚本中添加几行代码以重命名它们并在它们被脚本的其余部分处理之前添加前导零。

因为我在 Windows Cygwin 和 Mac 之间交替使用这个 Bash 脚本,所以如果可能的话,我想要在两种环境下都能工作的东西。此外,所有文件的名称都将包含空格。

你可以使用这样的东西:

files="*.jpg"
regex="(.*-)(.*)(\.jpg)"
for f in $files
do
    if [[ "$f" =~ $regex ]]
    then
        number=`printf %03d ${BASH_REMATCH[2]}`
        name="${BASH_REMATCH[1]}${number}${BASH_REMATCH[3]}"
        mv "$f" "${name}"
    fi
done

将其放入脚本中,例如 rename.sh 和 运行,将其放入要隐藏文件的文件夹中。根据需要修改...

无耻地从这里扯下来:
Capturing Groups From a Grep RegEx

这里:
How to Add Leading Zeros to Sequential File Names

#!/bin/bash

#cygcheck (cygwin) 2.3.1
#GNU bash, version 4.3.42(4)-release (i686-pc-cygwin)

namemodify()
{
bname="${1##*/}"
dname="${1%/*}"
mv "" "${dname}/00${bname}" # Add any number of leading zeroes.
}

export -f namemodify
find . -type f -iname "*jpg" -exec bash -c 'namemodify ""' _ {} \;

我希望这不会在 Mac 上中断 :) 祝你好运