0

当我运行我的脚本时,我指定了我在源目录中的文件中寻找的模式。模式可以位于文件名中的任何位置。

当我做:

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_

4

2 回答 2

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 的进程替换

最后将您的代码称为:

bash packageScript.sh -p 'TOM|JER'
于 2018-03-27T19:19:12.210 回答
0

我逃脱了|,这似乎已经成功了。最终命令: ".*TOM.*\|.*_JER_.*"

于 2018-03-27T20:13:11.457 回答