我希望重命名名称与某些后缀(即810或814 )匹配的目录中的文件。我希望新的名称包含一个根据后缀选择的字符串( 814,EB_ENROLL_REQ;810,EB_BCHG_REQ)。
输入文件名的示例(全部在$source_dir中)如下:
CCRD_LLX_814_20160218043477.EDI810
CCRD_LLX_814_20160218043407.EDI814
helloworld
CCRD_LLX_814_20160218043487.EDI814
test123
files.txt
CCRD_LLX_814_20160218043467.EDI810我想读取目录中的所有文件,只重命名以814或810结尾的文件,而忽略其他文件。
我试过:
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文件的输出文件名应该是:
CCRD_LLX_814_20160218043487.EDI814.XHS.JOBRUNID.EB_ENROLL_REQ.CCRD_LLX_814_20160218043487.EDI814.XHE发布于 2016-07-08 15:18:57
试试这个:
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"
donehttps://stackoverflow.com/questions/38270140
复制相似问题