我有一系列图像文件,文件名格式如下。
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个字符后删除文件名的方法,重命名文件,只在遇到重复时才增加?
答案 0 :(得分:0)
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.无论如何, counter将创建唯一的文件,但可以从分配的位数扩展(例如,它将生成00,01,.. 99,而下一个将为100。)