【问题标题】:Rename file as per fixed patter in UNIX在 UNIX 中按照固定模式重命名文件
【发布时间】:2021-04-13 16:13:57
【问题描述】:

我在 mydir 中有这些文件:

APPLE_STORE_iphone12.csv
APPLE_STORE_iphonex.csv
APPLE_STORE_ipad.csv
APPLE_STORE_imac.csv

需要在匹配模式“APPLE_STORE_”之后重命名文件。

必需的 O/P

APPLE_STORE_NY_iphone12_20210107140443.csv
APPLE_STORE_NY_iphonex_20210107140443.csv
APPLE_STORE_NY_ipad_20210107140443.csv
APPLE_STORE_NY_imac_20210107140443.csv

这是我尝试过的:

filelist=/mydir/APPLE_STORE_*.csv

dtstamp=`date +%Y%m%d%H%M%S`

location='NY'

for file in ${filelist}
do

        filebase=${file%.csv}
        mv ${file} ${filebase}_${location}_${dtstamp}.csv
done

这是给我的名字,如 APPLE_STORE_imac_NY_20210107140443.csv

【问题讨论】:

    标签: shell unix rename ksh


    【解决方案1】:

    另一种(可能不那么优雅)的方法是首先使用带有分隔符“_”的 awk 将文件名明确划分为各个部分,然后根据需要再次构建它。您的脚本可能如下所示:

    #!/bin/bash
    filelist=./APPLE_STORE_*.csv
    dtstamp=`date +%Y%m%d%H%M%S`
    location='NY'
    
    for file in ${filelist}
    do
    
      filebase=${file%.csv}
      part1=`echo ${filebase} | awk -v FS="_" '{print $1}'`
      part2=`echo ${filebase} | awk -v FS="_" '{print $2}'`
      part3=`echo ${filebase} | awk -v FS="_" '{print $3}'`
      mv ${file} ${part1}_${part2}_${location}_${part3}_${dtstamp}.csv
    
    done
    

    我测试成功了。

    【讨论】:

      【解决方案2】:

      你很亲密。

      destfile="$(echo $file | sed -e 's/^APPLE_STORE/APPLE_STORE_${location}/' -e 's/\.csv$/${dtstamp}.csv/')"`
      mv "$file" "$destfile"
      

      ...或类似的东西。

      【讨论】:

        猜你喜欢
        • 2010-11-08
        • 1970-01-01
        • 1970-01-01
        • 2014-09-24
        • 1970-01-01
        • 2014-05-27
        • 2015-10-10
        • 2012-08-30
        • 2018-11-28
        相关资源
        最近更新 更多