命令在sh文件中找不到与-name选项一起使用的命令

雨人

我正在使用以下命令来检索名称包含svjson位于远程服务器中给定目录中的文件数

nbs_files=`ssh -q -i ${sshkey} ${user}@${server} "find ${path}/ -maxdepth 1 -mindepth 1 -type f -name '*sv*' -o -name '*.json' -exec basename {} \; | wc -l"` 

此命令仅返回.json文件,而sv名称中带有文件存在于中${path}

当我删除-o -name '*.json'零件时,该命令运行良好,并返回名称中包含“ sv”的文件数。

有谁知道我该如何修改命令以检索sv名称中包含的文件.json以及扩展名为的文件

戈登·戴维森

问题是find表达式中的和/或运算符优先级具体而言,相邻测试之间的隐式AND优先级高于-o两个名称测试之间的OR()。因此,测试表达式被解析为:

    -maxdepth 1 -mindepth 1 -type f -name '*sv*'
OR
    -name '*.json' -exec basename {} \;

...并且由于-name '*.json'是与属于同一分支-exec-exec唯一分支,因此仅对json文件运行。

解决方案是在-name测试周围使用显式括号覆盖普通优先级

nbs_files=$(ssh -q -i ${sshkey} ${user}@${server} "find ${path}/ -maxdepth 1 -mindepth 1 -type f '(' -name '*sv*' -o -name '*.json' ')' -exec basename {} \; | wc -l")

顺便说一句,我也自由地将反引号替换为$( )-它们是更现代的选择,更易于阅读,并且没有反引号所具有的怪异的转义异常。看到这个问题BashFAQ#82

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jekyll错误/ sh:找不到命令:jekyll

来自分类Dev

Eclipse / bin / sh:g ++:找不到命令

来自分类Dev

sh:找不到命令

来自分类Dev

--name选项不能与git submodule add命令一起使用

来自分类Dev

Linux错误:sh:qsub:找不到命令

来自分类Dev

sh:ip:找不到命令centos

来自分类Dev

找不到studio.sh命令-Ubuntu

来自分类Dev

./startup.sh:找不到命令错误

来自分类Dev

Docker:找不到容器命令'/ bin / sh'

来自分类Dev

为什么sync选项与dd命令一起使用?

来自分类Dev

sh:react-scripts:找不到命令

来自分类Dev

sh:转换:在spyder上找不到命令

来自分类Dev

/ bin / sh:SET:找不到命令

来自分类Dev

错误“ sh ::找不到命令sh ::找不到命令”数字127

来自分类Dev

/ bin / sh:cc:找不到命令

来自分类Dev

sh:Script.py:找不到命令

来自分类Dev

为什么sync选项与dd命令一起使用?

来自分类Dev

sh:找不到命令

来自分类Dev

Synology / bin / sh:找不到命令

来自分类Dev

bash:文件:找不到命令

来自分类Dev

在sh脚本中找不到g ++命令

来自分类Dev

尝试挂载的sh错误:找不到命令

来自分类Dev

sudo:./abc.sh:找不到命令

来自分类Dev

/ bin / sh:ntpq:找不到命令

来自分类Dev

与-exec echo {}选项一起使用时,从find命令输出中删除前导点

来自分类Dev

/ bin / sh:clang ++:找不到命令

来自分类Dev

找不到LFS 6.7 / bin / sh命令

来自分类Dev

GNU Octave:`sh:vim:找不到命令`

来自分类Dev

找不到安装sh文件命令