根据条件在Linux中重命名文件名

问题描述 投票:0回答:2

我在Linux目录中有一些文件,如下所示。

email_Tracking_export_2018_08_26.zip
email_Tracking_export_2018_08_27.zip
email_Tracking_export_2018_08_28.zip
email_Tracking_export_2018_08_29.zip
email_Tracking_export_2018_09_03.zip
email_Tracking_export_history_Novemeber.zip
email_Tracking_export_history_December.zip
email_Tracking_export_history_january.zip
email_Tracking_export_history_february.zip
email_Tracking_export_history_march.zip
email_Tracking_export_history_April.zip

现在我想将文件名更改为如下所示。

email_Tracking_export_2018_08_26.zip
email_Tracking_export_2018_08_27.zip
email_Tracking_export_2018_08_28.zip
email_Tracking_export_2018_08_29.zip
email_Tracking_export_2018_09_03.zip
email_Tracking_export_2017_11_01.zip
email_Tracking_export_2017_12_01.zip
email_Tracking_export_2018_01_01.zip
email_Tracking_export_2018_02_01.zip
email_Tracking_export_2018_03_01.zip
email_Tracking_export_2018_04_01.zip

条件:

  1. 如果文件名采用yyyy-mm-dd格式,则保留原样
  2. 如果文件名是按字母顺序转换为yyyy-mm-dd
  3. 如果在该特定年份已经过了一个月,那么如果没有那么离开,那么年份应该是前一年。

我怎样才能在qazxsw poi中实现这一目标

linux bash shell file-rename
2个回答
1
投票
bash/Linux

0
投票

以下是小部件中的步骤,您可以找到答案并作为bash脚本执行,

  1. 创建一个键值对映射,将一个月映射到其数值。 (照顾小写/大写)
  2. 对于每个文件,请检查其格式。
  3. 为每个文件生成新名称。
  4. 然后,使用for f in email_Tracking_export_*.zip; do case "$f" in email_Tracking_export_????_??_??.zip) : ignore ;; *) date=$(stat -c %Y "$f") # mod time in seconds fmtdate=$(date --date="@$date" +%Y_%m_%d) # formatted mv "$f" email_Tracking_export_$fmtdate.zip ;; esac done 命令使用新名称重命名该文件。
© www.soinside.com 2019 - 2024. All rights reserved.