Bash命令查找与文件[0-9]+;匹配的文件;。js
我正在尝试找出如何在目录中匹配app1.js、app2.js文件,但不匹配app-foo-1.js文件。目前,我的bash脚本中有以下内容: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匹配 我怎样才能把它
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;执行
此操作不提供问题的答案。一旦你有足够的钱,你就可以