首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重命名目录中的文件;新名称取决于旧名称的一部分

重命名目录中的文件;新名称取决于旧名称的一部分
EN

Stack Overflow用户
提问于 2016-07-08 15:15:48
回答 1查看 62关注 0票数 1

我希望重命名名称与某些后缀(即810814 )匹配的目录中的文件。我希望新的名称包含一个根据后缀选择的字符串( 814EB_ENROLL_REQ810EB_BCHG_REQ)。

输入文件名的示例(全部在$source_dir中)如下:

代码语言:javascript
复制
CCRD_LLX_814_20160218043477.EDI810
CCRD_LLX_814_20160218043407.EDI814
helloworld
CCRD_LLX_814_20160218043487.EDI814
test123
files.txt
CCRD_LLX_814_20160218043467.EDI810

我想读取目录中的所有文件,只重命名以814810结尾的文件,而忽略其他文件。

我试过:

代码语言:javascript
复制
export search_dir=/home/test2

declare -a myArray
myArray[814]=EB_ENROLL_REQ
myArray[810]=EB_BCHG_REQ

for entry in "$search_dir"/*
do
    pattern=${entry: -3}
    #if ??
    mv "$entry" "$entry.XHS.JOBRUNID.${myArray[$pattern]}.$entry.XHE"
done

但没有得到我想要的。

例如,814文件的输出文件名应该是:

代码语言:javascript
复制
CCRD_LLX_814_20160218043487.EDI814.XHS.JOBRUNID.EB_ENROLL_REQ.CCRD_LLX_814_20160218043487.EDI814.XHE
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-08 15:18:57

试试这个:

代码语言:javascript
复制
declare -A myArray                   # -A, not -a --- index by strings
myArray["814"]=EB_ENROLL_REQ         # string suffixes, not numeric
myArray["810"]=EB_BCHG_REQ

cd "$search_dir"       # Otherwise you have to strip $search_dir out of $entry
for entry in *81[04]   # Only work on the files that end with 810 or 814
do
    pattern=${entry: -3}             # the string "810" or "814"
    mv "$entry" "$entry.XHS.JOBRUNID.${myArray[$pattern]}.$entry.XHE"
done
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38270140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档