我想重命名一些具有以下格式的文件:
ABCD_20181102.jpg
DEDE_2_20181030.jpg
即通常是 4 个随机字母,后跟下划线和日期(年、月、日)。或者 4 个随机字母,后跟一个下划线,一个随机数字,一个下划线,然后是一个日期。
我想将这些文件重命名为日期(如果需要,则为随机数),然后是随机字母,如下所示:
20181102_ABCD.jpg
20181030_2_DEDE.jpg
答案1
您可以使用参数扩展来提取部分字符串。#
从左侧删除,%
从右侧删除,将符号加倍会删除最长的可能匹配。
#! /bin/bash
for f in ABCD_20181102.jpg DEDE_2_20181030.jpg ; do
suffix=${f#*.}
before_underscore=${f%%_*}
after_underscore=${f#*_}
after_underscore=${after_underscore%.$suffix}
if [[ $after_underscore = *_* ]] ; then
before2=${after_underscore%_*}
after2=${after_underscore#*_}
after_underscore="$after2"_"$before2"
fi
echo mv "$f" "$after_underscore"_"$before_underscore.$suffix"
done
检查脚本是否满足您的需要后,只需删除echo
前面的内容即可。mv
答案2
如果你有拉里·沃尔的改名,那么
rename -n -e 's/.*_.*/$2_$1/' «file list»
-n
如果输出显示它将正确执行,则删除以启用。 (上面只是告诉你它会做什么,但不会做。)
答案3
和mmv
:
$ mmv -n '*_*.jpg' '#2_#1.jpg'
ABCD_20181102.jpg -> 20181102_ABCD.jpg
DEDE_2_20181030.jpg -> 2_20181030_DEDE.jpg
(-n
一旦您确定它正在做正确的事情,请将其删除)。