unix osx查找执行rm查找:exec:未知的主运算符或运算符

pzfprimi  于 2023-03-02  发布在  Unix
关注(0)|答案(4)|浏览(139)

我有一堆以“-e”结尾的文件要删除。

$ find . -name "*-e" exec rm {} \;
find: exec: unknown primary or operator

正则表达式是否以某种方式扩展,从而将一切都搞砸了?

0qx6xfy6

0qx6xfy61#

它应该是:

find . -name "*-e" -exec rm '{}' \;

或者更好:

find . -name "*-e" -exec rm '{}' +

根据man find

-exec utility [argument ...] {} +
   Same as -exec, except that ``{}'' is replaced with as many pathnames as possible for 
   each invocation of utility. This behaviour is similar to that of xargs(1).
bvjxkvbb

bvjxkvbb2#

+1到@anubhava的答案。然而,在它起作用之前,我必须非常小心:

TLDR:格式为-exec <your-command> {} \;

提示:先使用一些无害的东西,比如echo来让它工作。

find . -name "*.sh" -exec echo {} \;

./081.documentation/000.sticky.list_url_info_markdown/worklocal.sh
./081.documentation/001.fixed.p2.collab_diagrams/common.sh
./081.documentation/001.fixed.p2.collab_diagrams/worklocal.sh

一旦它的工作,你可以得到所有花式与额外的查找选项,如在
find . -name "*.sh" -maxdepth 3 -exec echo {} \;

确保使用-exec,而不是--execexec

记住,find的选项都是1个破折号。-exec也不例外。
find . -name "*.sh" --exec echo {} \;
find: --exec: unknown primary or operator
find . -name "*.sh" exec echo {} \;
find: exec: unknown primary or operator
注意**find:**后面的内容是如何反映您输入的内容的?这里find不知道发生了什么,所以您会得到一个通用的 I don 't know 消息。

一旦使用-exec,则以\;终止-该空间至关重要

find . -name "*.sh" -exec echo {}\;
find: -exec: no terminating ";" or "+"
..............👆你想在你的错误信息中看到-exec。那部分很好find知道它在看什么,所以它有-exec相关的信息。

最后,将echo替换为实际有效负载:

find . -name "*.sh" -exec reformat.py --myfancy-option-to-reformat {} \;

“{}”与{}没有任何区别。

在某些情况下,如果你的路径中有空格,那么如果你不确定的话,可以用引号,但是我不能触发任何错误,即使是用空格和不同于echo的命令(cat,ls)。
x1米20英寸1x

./bar zoom.sh
./foo.sh
./worklocal.sh

find . -name "*.sh" -exec echo '{}' \;

./bar zoom.sh
./foo.sh
./worklocal.sh

我不是说引号是无用的,我是说他们不会导致 * 未知的主要或运算符 *。
+结尾的###取消调用之间的换行符:
别忘了+前的空格。
find . -name "*.sh" -exec echo {} +

./bar zoom.sh ./foo.sh ./worklocal.sh

是的,我梦想有一个更用户友好的发现,但macos的Spotlight相关的mdfind is, by light-years, even more unfriendly when it comes to options

tf7tbtn2

tf7tbtn23#

使用查找删除参数:

find ./ -name "*-e" -delete
wz8daaqr

wz8daaqr4#

只需用途:find . "*-e" -type f exec rm '{}' +它适用于Mac OSX查找版本

相关问题