Bash 查找错误-未知的主或运算符

Bash 查找错误-未知的主或运算符,bash,unix,sh,Bash,Unix,Sh,上面的代码旨在查看目录名末尾带有短语“\u OUTPUT”(忽略大小写,因此-iname)的所有子目录,并将找到的内容复制到新位置Aspera\u Staging。我在一个.sh文件中运行代码,每当一个新目录被移动到完成时,launchcd应用程序启动控件就会触发该代码(这可能是问题的一部分,因为cron似乎非常挑剔) 它有一半时间工作,另一半时间什么都不做。不会复制输出目录。我找不到模式,它几乎是随机的。我在调试日志中注意到,它给了我以下错误: 查找:.*u输出:未知的主或运算符 我花了好几个

上面的代码旨在查看目录名末尾带有短语“\u OUTPUT”(忽略大小写,因此
-iname
)的所有子目录,并将找到的内容复制到新位置Aspera\u Staging。我在一个.sh文件中运行代码,每当一个新目录被移动到完成时,launchcd应用程序启动控件就会触发该代码(这可能是问题的一部分,因为cron似乎非常挑剔)

它有一半时间工作,另一半时间什么都不做。不会复制输出目录。我找不到模式,它几乎是随机的。我在调试日志中注意到,它给了我以下错误:

查找:.*u输出:未知的主或运算符


我花了好几个小时修修补补,想弄明白。我在这里和其他网站上找到了很多建议,但到目前为止都没有效果。很明显,它与查找输出文件夹有关,但我无法找到它的底部。

正如评论者所注意到的,
-iname
需要一个参数,因此下面的
-iregex
被理解为该参数,
-iregex
的参数被(mis)作为一个运算符,这就是您的错误消息

在您的上下文中,
-iname
-iregex
似乎是多余的,因此您的命令应该是:

find /Volumes/COMMON-LIC-PHOTO/STAGING/Completed -type d -maxdepth 2 -iname -iregex '.*_OUTPUT' -exec rsync -rtWv --stats --progress {} /Volumes/COMMON-LIC-PHOTO/ASPERA/ASPERA_STAGING/ \;
或:


(请注意
-iname
-iregex
的参数略有不同)

在紧靠
-iregex
之前的
-iname
之后缺少一个参数。你不能像那样把
-iname
-iregex
组合起来。他们每个人都期待着一场争论。好吧,我明白了。顺便说一句,我最初并没有写这段代码,我正在尝试修复它。我尝试在
-iname
-iregex
之间添加
'OUTPUT'
(例如,
-iname'OUTPUT'-iregex.*\u OUTPUT'
要查看该参数是否适用于
-iname
,但我仍然有相同的结果,它会忽略输出文件夹。如果您有
-iname'OUTPUT'
,它将查找具有确切名称
OUTPUT
的项目,而不是以
\u OUTPUT
结尾的项目。而且,它听起来像您。)可能不同时需要
-iname
-iregex
。请尝试删除
-iregex.*\u输出'
,只需执行
-iname'*\u输出'
。此外,请注意,每个“测试”之间都有一个隐含的逻辑“and”运算符提供给
查找
的参数。请阅读
man
页面,了解哪些参数是所谓的“测试”。在您的示例中,
-type
-iname
-iregex
都是测试。因此,如果您确实有
-iname'OUTPUT'-iregex.*\u OUTPUT'
,那么(暂时忽略大小写不敏感)
find
将只返回具有确切名称的目录
OUTPUT
,并且与正则表达式
'.\u OUTPUT'
匹配。请注意,这两个集合的交集为空,因此
find
将永远不会返回任何结果。因此好消息是,删除
-iregex
完全消除了调试中出现“未知主或运算符”错误,坏消息是仍然没有将任何输出文件夹复制到Aspera_暂存。
find /Volumes/COMMON-LIC-PHOTO/STAGING/Completed -type d -maxdepth 2 -iname '*_OUTPUT' -exec ... \;
find /Volumes/COMMON-LIC-PHOTO/STAGING/Completed -type d -maxdepth 2 -iregex '.*_OUTPUT' -exec ... \;