gpt4 book ai didi

linux - 重命名并增加重复项

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:57 24 4
gpt4 key购买 nike

我有一系列文件名格式如下的图像文件。

9407-C-9406-B-038.jpg
9407-C-9406-B-118.jpg
9422-AC-012.jpg
9422-AC-112.jpg
9422-BD-043.jpg
9422-BD-Still-001.jpg
9405_M.jpg
9792A.jpg
9792B.jpg

与我的目的相关的部分是前 4 个字符,其余部分无关紧要。

我想重命名文件,以便保留前导 4 个字符的字符串,保留扩展名,但遇到重复项时其余部分会递增:例如:

9422-AC-012.jpg becomes 942200.jpg
9422-AC-112.jpg becomes 942201.jpg
9422-BD-043.jpg becomes 942202.jpg
9422-BD-Still-001.jpg becomes 942203.jpg
9405_M.jpg becomes 940500.jpg
9792A.jpg becomes 979200.jpg
9792B.jpg becomes 979201.jpg

使用“重命名”,我可以在前 4 个字符后去除字符串,并且可以整体递增,这导致文件名的递增部分以千位结尾。

rename -n -N 0001 's/(?<=.{4}).*/$N.jpg/' *.jpg

谁能建议一种方法来去除前 4 个字符后的文件名,重命名文件,并仅在遇到重复时递增?

最佳答案

awk 助您一臂之力!

使用文件中列出的文件名

$ while read f t; 
do
echo "mv $f $t";
done < <(awk -F\. '{k=substr($0,1,4); printf "%s\t%s%04d.%s\n", $0,k,a[k]++,$NF}' file)

mv 9407-C-9406-B-038.jpg 94070000.jpg
mv 9407-C-9406-B-118.jpg 94070001.jpg
mv 9422-AC-012.jpg 94220000.jpg
mv 9422-AC-112.jpg 94220001.jpg
mv 9422-BD-043.jpg 94220002.jpg
mv 9422-BD-Still-001.jpg 94220003.jpg
mv 9405_M.jpg 94050000.jpg
mv 9792A.jpg 97920000.jpg
mv 9792B.jpg 97920001.jpg

删除 echo 以进行实际重命名,假设文件名中没有空格,至少 4 个字符长并且有扩展名。

这个例子是两位数的计数器,你提到的计数器是千位的,这里它是由打印格式%04d控制的,如果你不希望超过100,就把4改成2 . 无论如何,计数器将创建唯一的文件,但可能会从分配的位数扩展(例如,它将生成 00,01,..99,下一个将是 100。)

关于linux - 重命名并增加重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47729818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com