我有一堆以“-e”结尾的文件要删除。
$ find . -name "*-e" exec rm {} \; find: exec: unknown primary or operator
正则表达式是否以某种方式扩展,从而将一切都搞砸了?
0qx6xfy61#
它应该是:
find . -name "*-e" -exec rm '{}' \;
或者更好:
find . -name "*-e" -exec rm '{}' +
根据man find:
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).
bvjxkvbb2#
+1到@anubhava的答案。然而,在它起作用之前,我必须非常小心:
-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 {} \;
find . -name "*.sh" -maxdepth 3 -exec echo {} \;
-exec
--exec
exec
记住,find的选项都是1个破折号。-exec也不例外。find . -name "*.sh" --exec echo {} \;find: --exec: unknown primary or operatorfind . -name "*.sh" exec echo {} \;find: exec: unknown primary or operator注意**find:**后面的内容是如何反映您输入的内容的?这里find不知道发生了什么,所以您会得到一个通用的 I don 't know 消息。
find . -name "*.sh" --exec echo {} \;
find: --exec: unknown primary or operator
find . -name "*.sh" exec echo {} \;
find: exec: unknown primary or operator
\;
find . -name "*.sh" -exec echo {}\;find: -exec: no terminating ";" or "+"..............👆你想在你的错误信息中看到-exec。那部分很好find知道它在看什么,所以它有-exec相关的信息。
find . -name "*.sh" -exec echo {}\;
find: -exec: no terminating ";" or "+"
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 '{}' \;
我不是说引号是无用的,我是说他们不会导致 * 未知的主要或运算符 *。以+结尾的###取消调用之间的换行符:别忘了+前的空格。find . -name "*.sh" -exec echo {} +
+
find . -name "*.sh" -exec echo {} +
是的,我梦想有一个更用户友好的发现,但macos的Spotlight相关的mdfind is, by light-years, even more unfriendly when it comes to options
tf7tbtn23#
使用查找删除参数:
find ./ -name "*-e" -delete
wz8daaqr4#
只需用途:find . "*-e" -type f exec rm '{}' +它适用于Mac OSX查找版本
find . "*-e" -type f exec rm '{}' +
4条答案
按热度按时间0qx6xfy61#
它应该是:
或者更好:
根据
man find
:bvjxkvbb2#
+1到@anubhava的答案。然而,在它起作用之前,我必须非常小心:
TLDR:格式为
-exec <your-command> {} \;
提示:先使用一些无害的东西,比如
echo
来让它工作。find . -name "*.sh" -exec echo {} \;
一旦它的工作,你可以得到所有花式与额外的查找选项,如在
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
,则以\;
终止-该空间至关重要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
find . -name "*.sh" -exec echo '{}' \;
我不是说引号是无用的,我是说他们不会导致 * 未知的主要或运算符 *。
以
+
结尾的###取消调用之间的换行符:别忘了+前的空格。
find . -name "*.sh" -exec echo {} +
是的,我梦想有一个更用户友好的发现,但macos的Spotlight相关的mdfind is, by light-years, even more unfriendly when it comes to options
tf7tbtn23#
使用查找删除参数:
wz8daaqr4#
只需用途:
find . "*-e" -type f exec rm '{}' +
它适用于Mac OSX查找版本