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

Bash命令查找与文件[0-9]+;匹配的文件;。js,bash,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-whatch.js匹配 我怎样才能把它

我正在尝试找出如何在目录中匹配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-whatch.js匹配

我怎样才能把它裁剪成我想要的呢?我相信这很简单,但我只是从在线教程中获取代码,因为我不是bash程序员=)


感谢应用程序[0-9]中的d;不要重复$d;完成

或使用多个数字解决问题:

find $path -regextype egrep -regex '.*/app[0-9]+.js'
您可以使用
-exec
传递命令:

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

应用程序[0-9]中的d的
。js;不要重复$d;完成

或使用多个数字解决问题:

find $path -regextype egrep -regex '.*/app[0-9]+.js'
您可以使用
-exec
传递命令:

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

您可以使用
find
命令根据所需模式搜索文件,并使用
-exec
参数对每个结果执行命令:

find /home/chambres/web/x.org/public_html/2018/js/ \
    -type f \
    -regex '.*app[0-9]+.js' \
    -exec ls -la {} \;

上面的命令将对每个匹配的搜索结果执行
ls-la

您可以使用
find
命令根据所需模式搜索文件,并使用
-exec
参数对每个结果执行命令:

find /home/chambres/web/x.org/public_html/2018/js/ \
    -type f \
    -regex '.*app[0-9]+.js' \
    -exec ls -la {} \;

上面的命令将对每个匹配的搜索结果执行
ls-la

您也可以使用grep执行此操作,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;

您也可以使用grep进行匹配,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;

似乎您正在寻找extglob,它相当于正则表达式,不像ERE那么方便,也不像PCRE那么有表现力,但它允许做这项工作

shopt -s extglob

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

...
其中,
文件
必须以适当的模式更改,取自标题

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

?(模式列表)

*(图案列表)

+(图案列表)

@(图案列表)

!!(图案列表)


似乎您正在寻找extglob,它相当于正则表达式,不像ERE那么方便,也不像PCRE那么有表现力,但它允许做这项工作

shopt -s extglob

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

...
其中,
文件
必须以适当的模式更改,取自标题

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

?(模式列表)

*(图案列表)

+(图案列表)

@(图案列表)

!!(图案列表)

请试试这个:

find/home/chambres/web/x.org/public\u 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
请试试这个:

find/home/chambres/web/x.org/public\u 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

OP也希望与
app10.js
匹配,因为标题行指示
文件[0-9]+.js
。感谢您的回复。正如其他人所评论的那样,这似乎不适用于app30.js(或超过9的任何内容),OP希望与
app10.js
匹配,因为标题行指示
文件[0-9]+.js
。感谢您的回复。正如其他人评论的那样,app30.js(或任何超过9的版本)似乎不起作用。谢谢。我确实查看了find,但我不确定如何通过它运行我的命令?谢谢。我确实查看了find,但我不确定接下来如何通过它运行命令?请参见没有find和Gret这可能是您能做的最糟糕的事情:如果有带空格或全局字符的文件名,它将非常失败。此外,管道
find
grep
完全是一种反模式!(
find
具有基于名称的筛选器
-name
,并且您的
grep
将不会在基本名称上工作,而是在完整路径上工作)。请删除或修复此答案,以便我们停止传播坏的外壳做法!公平点,但如何将多个数字与
-name
匹配?您还可以编写一个模式来匹配路径的结尾…使用
-regex
选项。您需要同时指定
-regextype
选项。另请参阅未找到和grep这可能是您能做的最糟糕的事情:如果有带空格或全局字符的文件名,它将非常失败。此外,管道
find
grep
完全是一种反模式!(
find
具有基于名称的筛选器
-name
,并且您的
grep
将不会在基本名称上工作,而是在完整路径上工作)。请删除或修复此答案,以便我们停止传播坏的外壳做法!公平点,但如何将多个数字与
-name
匹配?您还可以编写一个模式来匹配路径的结尾…使用
-regex
选项。您需要同时指定
-regextype
选项。谢谢-这似乎起到了作用:
用于d in/home/chambres/web/x.org/public_html/2018/js/app+([0-9]).js;做
谢谢-这似乎起到了作用:
对于d in/home/chambres/web/x.org/public_html/2018/js/app+([0-9]).js;执行
此操作不提供问题的答案。一旦你有足够的钱,你就可以