我有一个很长的文件夹列表,如下所示:
001_bat_3513
002_mon_3213
003_bat_3515
scd_btt_3540
s52_bat_4513
xx2_bpt_8523
056_bot_3513
058_bat_1513
.
.
从此列表中:如何通过删除名称中的前三个数字或字符来重命名所有文件夹?所以列表就变成了这样:
bat_3513
mon_3213
bat_3515
btt_3540
bat_4513
bpt_8523
bot_3513
bat_1513
.
.
答案1
假设您的 shell 支持参数扩展:
for f in *_*_*; do mv -i "$f" "${f#*_}"; done
- 参数扩展模式
${f#*_}
删除_
从左边到第一个的子字符串
或者使用rename
( prename
):
rename 's/^[^_]*_(.*)/$1/' *_*_*
^[^_]*_
从头开始匹配第一个子字符串_
并(.*)
匹配其余的子字符串,它也会被放入第一个匹配组中,用于替换