【问题标题】:How to rename numbered files to begin and increase sequentially from one?如何重命名编号文件以从一个开始并按顺序增加?
【发布时间】:2015-08-06 22:13:09
【问题描述】:

给定一个文件目录:

00012.png, 00013.png, 00014.png 等等...

将整个批次重命名为的最简单方法是:

00001.png, 00002.png, 00003.png 等等...

我查看了rename 实用程序,但感到困惑。

还有许多其他问题在本质上与此类似,但它们非常具体(例如:“我如何删除这个下划线和三个随机字母”),因此通常以相似程度的具体度回答它们。我只是找不到这个精确问题的解决方案。

【问题讨论】:

  • 这是一个 1 班轮。 for file in *.png; do printf "mv '%s' '%05d.png'\n" "$file" $(( i++ )); done。为了保护您,这只会打印mv 'oldname' 'number.png'

标签: bash file rename naming


【解决方案1】:

如果您只想为文件编号,请使用简单的计数器:

# set counter to zero
i=0
for file in *png; do 
    # move file
    echo mv "$file" "$(printf "%05d.png" ${i})"
    # increase counter
    ((i++))
done

使用给定的文件名 00012.png 00013.png 00014.png 这会导致

mv 00012.png 00000.png
mv 00013.png 00001.png
mv 00014.png 00002.png

请删除echo,我只是添加它进行测试。

【讨论】:

  • for file in ls *png 可以缩短为for file in *png
  • 不仅可以,而且应该。 ls 用于显示一组文件的可读报告,而不是用于编写脚本。
【解决方案2】:

会尝试这样的:

ls *.png | while read file; do
    mv "$file" "$(printf %05d $(expr $(echo $file | cut -d. -f1) - 11)).png"
done;

(出于测试目的,您可以将“mv”替换为“echo”)

$ touch 00012.png 00013.png 00014.png
$ ls *.png | while read file; do echo "$file" "$(printf %05d $(expr $(echo $file | cut -d. -f1) - 11)).png";done;
00012.png 00001.png
00013.png 00002.png
00014.png 00003.png

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 2011-04-16
    • 2011-06-10
    • 2020-08-31
    • 2019-10-07
    • 2012-12-22
    • 2017-04-10
    • 2021-11-18
    相关资源
    最近更新 更多