Bash命令查找与文件[0-9] +。js匹配的文件

时间:2019-02-01 11:22:37

标签: bash

我正在尝试确定如何匹配文件app1.js,app2.js,但 app-foo-1.js在目录中。目前,我的bash脚本中包含以下内容:

for d in /home/chambres/web/x.org/public_html/2018/js/app*.js ; do
    filename="${d##*/}"
    echo "$d"
    echo "$filename"

    echo " "
done

这与它们匹配-但也与app-whatever.js匹配

如何将其缩小为我想要的?我敢肯定它很简单,但我只是从在线教程中获取代码,因为我不是bash程序员=)

谢谢

5 个答案:

答案 0 :(得分:4)

似乎您正在寻找extglob,它等效于正则表达式,不像ERE那样方便或不像PCRE那样具有表达能力,但可以完成工作

shopt -s extglob

for d in file+([0-9]).js ; do

...

其中file必须以适当的模式进行更改,是从标题中摘录的。

来自Pattern matching in Bash Manual

  

如果使用内置的shopt启用了extglob shell选项,则会识别出几个扩展的模式匹配运算符。在以下描述中,模式列表是一个或多个由“ |”分隔的模式的列表。可以使用以下一个或多个子图案来形成复合图案:

     

?(模式列表)

Matches zero or one occurrence of the given patterns.
     

*(样式列表)

Matches zero or more occurrences of the given patterns.
     

+(样式列表)

Matches one or more occurrences of the given patterns.
     

@(模式列表)

Matches one of the given patterns.
     

!(模式列表)

Matches anything except one of the given patterns. 

答案 1 :(得分:2)

您可以使用series: [{ pointStart: Date.UTC(2010, 0, 1), pointIntervalUnit: 'month', data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] }] 命令根据所需模式搜索文件,并使用find参数对每个结果执行命令:

-exec

上面的命令将在每个匹配的搜索结果上执行find /home/chambres/web/x.org/public_html/2018/js/ \ -type f \ -regex '.*app[0-9]+.js' \ -exec ls -la {} \;

答案 2 :(得分:0)

for d in app[0-9].js; do echo $d; done

或用多个数字解决问题:

find $path -regextype egrep -regex '.*/app[0-9]+.js'

您可以使用-exec传递命令:

find $path -regextype egrep -regex '.*/app[0-9]+.js' -exec ls -l {} \;

答案 3 :(得分:0)

请尝试以下操作:

find /home/chambres/web/x.org/public_html/2018/js -iregex '.*\/app[0-9]*\.js'

完整的示例:

cd /home/chambres/web/x.org/public_html/2018/js
for file in $(find . -iregex '.*\/app[0-9]*\.js')
do
  echo $file
done

答案 4 :(得分:-1)

您也可以使用grep来实现,它可以匹配一个或多个数字:

find /home/chambres/web/x.org/public_html/2018/js/ -type f | grep "app[0-9]\+"

,如果您必须对这些文件执行命令:

for file in $(find /home/chambres/web/x.org/public_html/2018/js/ -type f | grep "app[0-9]\+"); do
echo $file;
done;