通过删除随机数重命名多个文件

通过删除随机数重命名多个文件

我使用的是 Ubuntu,并且有很多文件。文件有两种类型。

"img_00000_c0_1283347740957299us.jpg" 
"img_00000_c1_1283347740342342us.jpg"

它们通过 c0 或 c1 来区分。 “00000”位置的数字随着文件编号的增加而增加。例如,输入 c0,第 5 个文件的名称为“img_00005_c0_1283347740957299us.jpg”。问题是,“c0_”或“c1_”后面的长数字对我来说毫无意义,它们是随机数。它们并不总是“1283347740957299us”。因此我想重命名这些文件,只是删除最后的数字。

img_00005_c1_1283347740957299us.jpg ---> img_00005_c1.jpg

我在网上尝试了几个答案。例如,像这样的答案

for FILE in eventDataLog.txt.2015*; do mv "$FILE" "abc-$FILE"; done

我猜上面的代码来自这个答案会对我有帮助,但就我而言,重命名并不是添加字符。我还找到了一些关于减去名称部分的答案这里,但我的情况是随机数。

提前致谢!

答案1

有几个选项,都只是_从名称末尾删除最短的后缀:

  1. 使用基于 perl 的prename命令

    $ prename -nv -- 's/_[^_]*\.jpg/.jpg/' *.jpg
    img_00000_c0_1283347740957299us.jpg renamed as img_00000_c0.jpg
    img_00000_c1_1283347740342342us.jpg renamed as img_00000_c1.jpg
    

n(当您对输出满意时删除该选项)

  1. 使用 shell 参数扩展

    $ for f in img_*.jpg; do echo mv -- "$f" "${f%_*}.jpg"; done
    mv -- img_00000_c0_1283347740957299us.jpg img_00000_c0.jpg
    mv -- img_00000_c1_1283347740342342us.jpg img_00000_c1.jpg
    

echo(当您对输出满意时删除)。

如果您想更具体地匹配模式(即作为一个或多个十进制数字的序列,后跟us),那么您可以这样做,但根据您提供的信息,这似乎没有必要。

答案2

字符串前面似乎有 16 位数字us。您可以使用rename总共删除这 18 个字符,如下所示。

rename -v 's/_(\d){16}us//' *.jpg
img_00000_c0_1283347740957299us.jpg renamed as img_00000_c0.jpg
img_00000_c1_1283347740342342us.jpg renamed as img_00000_c1.jpg
img_00005_c1_1283347740957299us.jpg renamed as img_00005_c1.jpg

(详细)选项-v显示重命名的文件名。该(\d){16}模式表示一组 16 位数字。上面显示的输出基于三个示例输入文件。您还可以多看看的例子rename

相关内容