如何将前导零添加到顺序文件名

时间:2016-08-03 01:48:50

标签: bash cygwin file-rename

我有图像文件,当它们被创建时有这些文件名:

file-1.jpg的名称 file-2.jpg的名称 文件名3.jpg file-4.jpg的名称 ..等

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

由于我在Windows Cygwin和Mac之间交替使用这个Bash脚本,如果可能的话,我希望在两种环境中都能正常工作。此外,所有文件都将包含带空格的名称。

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

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

答案 1 :(得分:0)

#!/bin/bash

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

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

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

我希望这也不会在Mac上打破:)祝你好运

相关问题