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