我有一堆以“-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).
type find
的输出是什么? - anubhavafind ~ -iname "*.py"
这样的查找查询问题,我只需要引用文件名序列就可以让它工作。当我运行它时,{}
不需要加引号。 - wesinat0r+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 {} \;
-exec
,而不是--exec
或exec
记住,find的所有选项都要带一个破折号。 -exec
并没有什么不同。
find . -name "*.sh" --exec echo {} \;
❌ find: --exec: 未知的关键字或运算符
find . -name "*.sh" exec echo {} \;
❌ find: exec: 未知的关键字或运算符
注意,find:后面跟着的是你输入的内容。如果find不知道发生了什么,那么会出现一条通用的我不知道消息。
-exec
,就以 \;
结束——这个空格很重要find . -name "*.sh" -exec echo {}\;
❌ find: -exec: 没有结束符号";"或"+"
................. 你想在错误消息中看到-exec
。这部分是正确的✅,find知道它所看到的与-exec
相关的信息。
echo
替换为你的实际有效负载:find . -name "*.sh" -exec reformat.py --myfancy-option-to-reformat {} \;
也许在某些情况下会有所不同,比如如果你的路径中有空格,那么如果不确定,请使用引号。但是,即使用不同的命令(cat、ls)来代替echo,甚至带有空格,我也无法触发任何错误。
find . -name "*.sh" -exec echo {} \;
./bar zoom.sh
./foo.sh
./worklocal.sh
查找当前目录下所有以.sh结尾的文件,并对每一个文件执行echo命令
./bar zoom.sh
./foo.sh
./worklocal.sh
我并不是在说这些引用没有用处,我是在说它们并没有导致未知的主要或运算符。
+
结尾会去除调用之间的换行:别忘了那个加号前面的空格。
find . -name "*.sh" -exec echo {} +
./bar zoom.sh ./foo.sh ./worklocal.sh
是的,我梦想有一个更加用户友好的查找工具。但是macOS相关的Spotlight mdfind 在选择方面比光年还要不友好。
使用find删除参数:
find ./ -name "*-e" -delete
只需使用:find . "*-e" -type f exec rm '{}' +
它适用于 Mac OSX 的 find 版本。
-exec
而不是exec
。 - JL Peyret
{}
将扩展为./some/path/-e
,它不能被视为一个选项。 - Reinstate Monica Pleasefind
和exec
的使用示例时,无意中遇到了这个问题,忽略了您正在执行rm
的事实!温馨提示:这个命令会删除目录的所有内容!如果你只是在尝试破解,请谨慎使用。我曾经吃过苦头。 - Eric