通过切换下划线之前和之后的内容来重新管理文件名

通过切换下划线之前和之后的内容来重新管理文件名

我想重命名一些具有以下格式的文件:

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一旦您确定它正在做正确的事情,请将其删除)。

相关内容