Bash

通過切換下劃線前後的內容來重新命名文件名

  • November 2, 2018

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

ABCD_20181102.jpg
DEDE_2_20181030.jpg

即通常是 4 個隨機字母,後跟一個下劃線和一個日期(年、月、日)。或者 4 個隨機字母,後跟一個下劃線、一個隨機數、一個下劃線,然後是一個日期。

我想將這些文件重命名為日期,(如果需要,隨機數),然後是隨機字母,如下所示:

20181102_ABCD.jpg
20181030_2_DEDE.jpg

您可以使用參數擴展來提取部分字元串。#從左邊%刪除,從右邊刪除,加倍符號刪除最長可能匹配。

#! /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

引用自:https://unix.stackexchange.com/questions/479424