我想将文件重命名为递增数字格式,如下所示:
04.jpg
05.jpg
06.jpg
因此我需要提出一种方法来增加变量值并将其传递给rename
.不知何故,互联网告诉我这样做:
rename -n 'our $i; s/\d+/sprintf("new\/%03d", $i++)/e' *.*
关键是我不明白这是如何工作的。到目前为止,我只能猜测这our $i
将响应传递未知$i
变量的引用以进行重命名。然后再部分加一sprintf("new\/%03d", $i++)
。根据这个结论,我决定尝试一下:
i=4
rename -n 'our $i; s/\d+/sprintf("new\/%03d", $i++)/e' *.*
但它失败了。如何设置起始值以便$i
重命名可以按我的预期工作?
答案1
和zsh
:
autoload zmv
n=0; zmv -n '*.jpg(#qn[1,100])' 'new/${(l[2][0])$((++n))}.jpg'
最多可重命名 100 个 jpeg 文件(列表按数字排序)。
(-n
如果愿意,请删除以进行试运行)。
使用perl
-basedrename
和 basic shell,你可以做一些接近的事情(没有原始列表的数字排序,也没有保护措施zmv
):
rename -n '
our $i //= 1;
exit if $i > 100;
$_ = sprintf "new/%02d.jpg", $i++' ./*.jpg
rename
perl
在循环中为每个文件运行给定的代码,并使用$_
.该代码旨在更改$_
为文件的新名称。
这里our $i
定义了范围$i
。你不想要当地的范围如您希望从一个文件到下一个文件记住my $i
的增量值,因此(请参阅详细信息)。$i
our
perldoc -f our
Perl构造s/regexp/replacement/flags
是对 的内容进行正则表达式替换$_
。如果您从头开始构建替换名称,则此处不需要它。
答案2
这。起始索引可以作为第一个参数提供。
perl -le '
my $i=shift;
my $w=length(@ARGV+$i);
-f $_ and
rename($_,sprintf("new/%0${w}d.jpg",$i++))
or die("moving $_:$!")
for @ARGV;
' 4 ./*.jpg
tree -F
输出
Before renaming step...
.
├── food1.jpg
├── food2.jpg
├── food3.jpg
├── food4.jpg
├── food5.jpg
├── food6.jpg
├── food7.jpg
├── food8.jpg
├── food9.jpg
├── infile
├── new/
└── x
After renaming step....
.
├── infile
├── new/
│ ├── 04.jpg
│ ├── 05.jpg
│ ├── 06.jpg
│ ├── 07.jpg
│ ├── 08.jpg
│ ├── 09.jpg
│ ├── 10.jpg
│ ├── 11.jpg
│ └── 12.jpg
└── x
答案3
在bash
#!/bin/bash
for f in `find . -type f -name "[0-9]*.jpg" -printf "%f\n" | sort -r`; do
# Take the prefix (01.jpj --> 01)
index="${f%.*}"
# Remove the leading zero if have it
index="${index#0*}"
# add one to the index
index=$((index+1))
# Add again the leading zero if we are under the double
[ "$index" -gt 10 ] || index="0$index"
# Rename
mv "$f" "$index.jpg"
done
或者相同的方法,但使用python3
:
#!/usr/bin/python3
import os
import re
all_file = [ _[:_.index(".")] for _ in os.listdir() if re.match(r'^\d+(?=\.jpg$)', _)]
all_file.sort(reverse=True)
for ftr in all_file:
ni = "0" + str(int(ftr) + 1) if int(ftr) < 9 else str(int(ftr) + 1)
os.rename(ftr + ".jpg", ni + ".jpg")