当我运行脚本时,我在源目录中的文件中指定了我正在寻找的模式。模式可以位于文件名中的任何位置。
当我这样做时:
sh packageScript.sh -p ".*TOM.*
该脚本可以根据需要运行,并且名称中包含“TOM”的所有文件都已打包。
但是如果我希望脚本在名称中打包带有“TOM”或“ JER ”的文件,脚本将失败。我尝试了以下各项:
sh packageScript.sh -p ".*TOM.*||.*_JER_.*"
sh packageScript.sh -p ".*TOM.*|.*_JER_.*"
迭代我脚本中文件的for循环:
for file in $(find -regex "$PATTERN" -type f);
do
//things get done here
done
(我在脚本顶部的“while getopts”中将-p标志的值赋给$ PATTERN)
示例文件名:
M_V_CHUCK_TOM_20180105.txt
M_V_CHUCK_TOM_20170105.txt
M_V_CHUCK_TOM_20160105.txt
M_V_JONES_OUT_20180105.txt
M_V_JONES_OUT_20170105.txt
M_V_JONES_OUT_20160105.txt
编辑:JER
已更正为_JER_
,需求
答案 0 :(得分:1)
使用find
将循环更改为:
while IFS= read -d '' -r file; do
//things get done here
echo "$file"
done < <(find . -type f -regextype posix-egrep -regex ".*($PATTERN).*" -print0)
gnu find
的扩展正则表达式功能和-regextype
选项。最后将您的代码称为:
bash packageScript.sh -p 'TOM|JER'
答案 1 :(得分:0)
我逃脱了|
,这似乎已经成功了。最终命令:
".*TOM.*\|.*_JER_.*"