osx find exec rm find: exec: 未知的主要或运算符
osx find exec rm find: exec: unknown primary or operator
我有一堆以“-e”结尾的文件想要删除。
$ find . -name "*-e" exec rm {} \;
find: exec: unknown primary or operator
正则表达式是否以某种方式扩展导致一切混乱?
应该是:
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).
只需使用:find . "*-e" -type f exec rm '{}' +
它适用于 Mac OSX 查找版本
+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
,而不是--exec
或exec
记住 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
以 \;
终止 - space 是关键
find . -name "*.sh" -exec echo {}\;
❌find: -exec: no terminating ";" or "+"
.........你想在你的错误信息中看到 -exec
。那部分很好 ✅ find 知道它在看什么所以它有 -exec
相关消息。
最后,将 echo
替换为您的实际负载:
find . -name "*.sh" -exec reformat.py --myfancy-option-to-reformat {} \;
“{}”与 {} 没有任何区别。
可能,在某些情况下,如果你的路径中有 space,所以如果你不确定,请加上引号。但是即使使用 spaces 并且使用与 echo.
不同的命令(cat,ls),我也无法触发任何错误
find . -name "*.sh" -exec echo {} \;
./bar zoom.sh
./foo.sh
./worklocal.sh
find . -name "*.sh" -exec echo '{}' \;
./bar zoom.sh
./foo.sh
./worklocal.sh
我不是说引号没用,我是说它们不会导致 未知的主要或运算符。
以 +
结尾去除调用之间的换行符:
不要忘记 +.
之前的 space
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
使用查找删除参数:
find ./ -name "*-e" -delete
我有一堆以“-e”结尾的文件想要删除。
$ find . -name "*-e" exec rm {} \;
find: exec: unknown primary or operator
正则表达式是否以某种方式扩展导致一切混乱?
应该是:
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).
只需使用:find . "*-e" -type f exec rm '{}' +
它适用于 Mac OSX 查找版本
+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
,而不是--exec
或exec
记住 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
以 \;
终止 - space 是关键
find . -name "*.sh" -exec echo {}\;
❌find: -exec: no terminating ";" or "+"
.........你想在你的错误信息中看到 -exec
。那部分很好 ✅ find 知道它在看什么所以它有 -exec
相关消息。
最后,将 echo
替换为您的实际负载:
find . -name "*.sh" -exec reformat.py --myfancy-option-to-reformat {} \;
“{}”与 {} 没有任何区别。
可能,在某些情况下,如果你的路径中有 space,所以如果你不确定,请加上引号。但是即使使用 spaces 并且使用与 echo.
不同的命令(cat,ls),我也无法触发任何错误find . -name "*.sh" -exec echo {} \;
./bar zoom.sh
./foo.sh
./worklocal.sh
find . -name "*.sh" -exec echo '{}' \;
./bar zoom.sh
./foo.sh
./worklocal.sh
我不是说引号没用,我是说它们不会导致 未知的主要或运算符。
以 +
结尾去除调用之间的换行符:
不要忘记 +.
之前的 spacefind . -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
使用查找删除参数:
find ./ -name "*-e" -delete