将具有不同名称的多个文件重命名为相同名称和不同编号

时间:2019-01-05 09:02:06

标签: regex linux shell

我有多张卡车的图片,它们的名称杂乱无章,格式不同(jpeg,jpg,png等),我想将它们重命名为“ truck1.jpeg”,“ truck2.jpg”,“ truck3.png”和以此类推。如何使用#include <stdio.h> #include <stdlib.h> void back(char*k) { printf("%c",'O'); while(*k) //->not work?? { back(++k); } printf("%c",'f'); } int main() { char k[]="he"; back(k); return 0; } 命令?

1 个答案:

答案 0 :(得分:3)

使用bashmv可能更容易,因为AFAIK您需要像bash这样的东西来生成数字序列。在bash

i=1
for x in *; do 
  echo $x '->' truck$i.${x##*.}
  mv "$x" truck$i.${x##*.} && i=$((i+1))      
done

for x in *对名称不以点开头且位于当前目录中的所有文件进行操作。您可以调整glob使其具有更高的排他性,但是如果文件位于其他目录中,则需要修改此脚本。同样,将文件收集到一个目录中或将其放入脚本文件并使用find ... -exec在多个目录中执行可能更容易。

这使用i作为计数器来生成数字。诀窍是${x##*.}表达式,它使用文件名并删除所有内容,直到最后一个点。这使您可以保留文件扩展名并将其重新附加到新名称。 您必须注意正确设置i ,否则您将用新文件覆盖旧的truck1文件。