按照 UNIX 中的固定模式重命名文件
Rename file as per fixed patter in UNIX
我的目录中有这些文件:
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
你们真亲密
destfile="$(echo $file | sed -e 's/^APPLE_STORE/APPLE_STORE_${location}/' -e 's/\.csv$/${dtstamp}.csv/')"`
mv "$file" "$destfile"
...或类似的东西。
另一种(可能不太优雅)的方法是首先使用带有分隔符“_”的 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 }'`
part2=`echo ${filebase} | awk -v FS="_" '{print }'`
part3=`echo ${filebase} | awk -v FS="_" '{print }'`
mv ${file} ${part1}_${part2}_${location}_${part3}_${dtstamp}.csv
done
我测试成功了
我的目录中有这些文件:
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
你们真亲密
destfile="$(echo $file | sed -e 's/^APPLE_STORE/APPLE_STORE_${location}/' -e 's/\.csv$/${dtstamp}.csv/')"`
mv "$file" "$destfile"
...或类似的东西。
另一种(可能不太优雅)的方法是首先使用带有分隔符“_”的 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 }'`
part2=`echo ${filebase} | awk -v FS="_" '{print }'`
part3=`echo ${filebase} | awk -v FS="_" '{print }'`
mv ${file} ${part1}_${part2}_${location}_${part3}_${dtstamp}.csv
done
我测试成功了