【问题标题】:How to add leading zero's to sequential file names如何将前导零添加到顺序文件名
【发布时间】:2016-08-03 10:49:40
【问题描述】:

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

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

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

由于我在 Windows Cygwin 和 Mac 之间交替使用这个 Bash 脚本,如果可能的话,我想要在这两种环境中都可以使用的东西。此外,所有文件的名称都带有空格。

【问题讨论】:

  • 所有文件都在同一个文件夹中吗?还有哪个 cygwin(cygcheck.exe -V) 和 Mac 上的 bash 版本?
  • 糟糕,您忘记发布代码了。 StackOverflow 旨在帮助人们修复他们的代码。这不是免费的编码服务。任何代码都比没有代码好。我确定我在这里看到过类似的问题,您是否搜索过解决方案。使用其中之一,并更新您的 Q 以指出您遇到问题的地方。祝你好运。

标签: bash cygwin file-rename


【解决方案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

【讨论】:

  • 非常感谢!像魅力一样工作!
【解决方案2】:
#!/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 上中断 :) 祝你好运

【讨论】:

  • 当您拥有一位数的文件名时,这很酷,但如果您获得“文件名 10.jpg”之类的内容,您将获得转换为“文件名 0010 的名称。 jpg”而不是假定的“文件名 010.jpg”:/
猜你喜欢
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
相关资源
最近更新 更多