我有图像文件,当它们被创建时有这些文件名:
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脚本,如果可能的话,我希望在两种环境中都能正常工作。此外,所有文件都将包含带空格的名称。
答案 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上打破:)祝你好运