Bash 重命名目录中的文件;新名称取决于旧名称的一部分
我想重命名目录中名称与某些后缀匹配的文件,即Bash 重命名目录中的文件;新名称取决于旧名称的一部分,bash,shell,awk,sed,grep,Bash,Shell,Awk,Sed,Grep,我想重命名目录中名称与某些后缀匹配的文件,即810或814。我希望新名称包含一个根据后缀选择的字符串(对于814,EB\u-ENROLL\u-REQ;对于810,EB\u-BCHG\u-REQ) 输入文件名(全部在$source\u dir中)的示例如下: 我想读取目录中的所有文件,只重命名以814或810结尾的文件,忽略其余文件 我试过: export search_dir=/home/test2 declare -a myArray myArray[814]=EB_ENROLL_REQ m
810
或814
。我希望新名称包含一个根据后缀选择的字符串(对于814
,EB\u-ENROLL\u-REQ
;对于810
,EB\u-BCHG\u-REQ
)
输入文件名(全部在$source\u dir
中)的示例如下:
我想读取目录中的所有文件,只重命名以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
试试这个:
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
我想我把我的qs弄糊涂了,说它是JU的一部分。整个问题是我想添加一些基于后缀814/810的字符串file@Rczone编辑-试一试再次编辑以修复我在测试中发现的一个bug。是的,我声明了search_dir=/home/test/所以当我读到它正在读取目录路径时also@Rczone那么,编辑的脚本是否满足您的需要?在我的系统中,它似乎与您在编辑的问题中描述的一样(如果我按照您的意愿理解问题)。@Rczone很高兴听到它!那么请你打勾接受这个答案好吗?如你所知,这就把问题从没有答案的名单上清除了,我们俩都得到了声誉分数:)。
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