按顺序重命名多个文件并以相同的前缀开头

按顺序重命名多个文件并以相同的前缀开头

我有一个包含 1500 个文件的文件夹,我想通过终端或 shell 脚本自动重命名它们,如下所示:“prefix_number.extension”。
例子:cin_1.jpg,cin_2.png ...

答案1

尝试:

count=0; for f in *; do [ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}"; done

或者,如果您希望将命令分布在多行中:

count=0
for f in *
do
    [ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}"
done

怎么运行的

  • count=0

    这会将变量初始化count为零。

  • for f in *; do

    这将开始循环当前目录中的所有文件。

  • [ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}"

    [ -f "$f" ]测试该文件是否$f是常规文件(而不是目录)。

    如果$f是常规文件,则mv运行 move ( ) 命令。 -i指示mv不要在未经询问的情况下覆盖任何现有文件。 "cin_$((++count)).${f##*.}"是新文件的名称。 cin_是前缀。 返回递增后 $((++count))的值。是文件的扩展名。count${f##*.}$f

  • done

    这标志着循环的结束。

例子

考虑包含以下三个文件的目录:

$ ls
alpha.jpg  beta.png  gamma.txt

让我们运行命令:

$ count=0; for f in *; do [ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}"; done

运行我们的命令后,目录中的文件现在为:

$ ls
cin_1.jpg  cin_2.png  cin_3.txt

答案2

一句话rename

rename -n 's/.+\./our $i; sprintf("cin_%d.", 1+$i++)/e' *

这将匹配名称中带有点的每个文件(如果有多个,则匹配最后一个),并重命名该部分,直到点后面cin_跟着一个递增的数字和一个点。使用标志,-n它只会打印它将执行的操作,删除它以执行重命名。

示例运行

$ ls
a.jpg  b.jpg  d.png  e.png
$ rename -n 's/.+\./our $i; sprintf("cin_%d.", 1+$i++)/e' *
rename(a.jpg, cin_1.jpg)
rename(b.jpg, cin_2.jpg)
rename(d.png, cin_3.png)
rename(e.png, cin_4.png)
$ rename 's/.+\./our $i; sprintf("cin_%d.", 1+$i++)/e' *
$ ls
cin_1.jpg  cin_2.jpg  cin_3.png  cin_4.png

来源:如何从命令行按顺序重命名多个文件?

相关内容