Answers:
find的命令行由不同类型的选项组成,这些选项组合在一起构成了表达式。
该find
选项-delete
是一个动作。
这意味着将对迄今为止匹配的每个文件执行该命令。
作为路径后的第一个选项,所有文件都将匹配...糟糕!
这很危险-手册页至少有一个警告:
来自man find
:
ACTIONS
-delete
Delete files; true if removal succeeded. If the removal failed, an
error message is issued. If -delete fails, find's exit status will
be nonzero (when it eventually exits). Use of -delete automatically
turns on the -depth option.
Warnings: Don't forget that the find command line is evaluated as an
expression, so putting -delete first will make find try to delete
everything below the starting points you specified. When testing a
find command line that you later intend to use with -delete, you
should explicitly specify -depth in order to avoid later surprises.
Because -delete implies -depth, you cannot usefully use -prune and
-delete together.
从更深处开始man find
:
EXPRESSIONS
The expression is made up of options (which affect overall operation rather
than the processing of a specific file, and always return true), tests
(which return a true or false value), and actions (which have side effects
and return a true or false value), all separated by operators. -and is
assumed where the operator is omitted.
If the expression contains no actions other than -prune, -print is per‐
formed on all files for which the expression is true.
在尝试find
命令将执行的操作时:
看看命令是什么样的
find . -name '*ar' -delete
将被删除,您可以先将其替换-delete
为更无害的操作- -fls
或-print
:
find . -name '*ar' -print
这将打印受操作影响的文件。
在此示例中,-print可以省略。在这种情况下,根本没有动作,因此最明显的是隐式添加:-print
。(请参见上面引用的“表达式”部分的第二段)
-delete
标志:-)但没有任何人会做的原因find . -delete
,而不是rm -rf .
?还是恰好是find
解析和处理其参数的方式?
warning: use -depth when testing stuff you later want to -delete
上没有说明您在实际示例中没有做过的事情吗?
-n
选项-delete的位置使用print ;当然,第一个命令根本不应该有任何实际用途。我去改变它。
在find
论据顺序上很重要。
参数可以是选项,测试和操作。通常,您应该首先使用选项,然后进行测试,然后再进行操作。
有时find
甚至会警告您可能存在错误的排序(例如,当您-maxdepth
在其他参数后面使用时),但其他情况似乎并非如此。
什么find . -delete -name '*ar'
是:
您可能想做的是:
find -name '*ar' -delete
对于每个文件,这将查看其是否匹配'*ar'
,并且仅在满足条件时才会删除该文件。
对不起,如果发现太晚了。