bash find,仅删除文件-参数顺序
假设今天是4月8日,我在bash中执行以下命令bash find,仅删除文件-参数顺序,bash,find,positional-operator,find-util,Bash,Find,Positional Operator,Find Util,假设今天是4月8日,我在bash中执行以下命令 cd /tmp mkdir hello touch -d 2015-04-01 hello 然后,假设我想删除/tmp中所有超过一天的文件,但不删除目录,我执行以下操作: find /tmp -mtime +1 -delete -type f 如果目录“hello”不是文件,为什么会被删除 谢谢 find命令按顺序执行表达式。由于-delete在-type之前,因此永远不会到达-type。尝试: find /tmp -mtime +1 -typ
cd /tmp
mkdir hello
touch -d 2015-04-01 hello
然后,假设我想删除/tmp中所有超过一天的文件,但不删除目录,我执行以下操作:
find /tmp -mtime +1 -delete -type f
如果目录“hello”不是文件,为什么会被删除
谢谢 find命令按顺序执行表达式。由于
-delete
在-type
之前,因此永远不会到达-type
。尝试:
find /tmp -mtime +1 -type f -delete
- 使用正确的抽象术语expression,引用以
开头的参数列表-mtime…
- 相反,OP将此列表称为选项[编辑:在自删除的帖子中]
- 遵循输入路径的参数统称为表达式
- 表达式由以下内容组成:
- 测试(例如,
)-f型
- 操作(例如,
)-删除
- 选项(例如,
)-请注意,这些选项与标准选项不同,标准选项甚至必须位于输入路径之前(例如,-maxdepth 1
)查找-L/tmp…
- 注意:上面是GNU
术语,它比中的术语更细粒度,其中所有三个结构都由一个名称调用,primaries(BSDfind
也仅在其find
页面中使用primaries)man
- 运算符:
(-a
)表示逻辑and;-和
(-o
)表示逻辑and;-或
代码>(
)表示否定;括号中的替代形式不符合POSIX,但由GNU和BSD find支持-非
- 测试(例如,
- 运算符将测试和操作组合成布尔表达式。
- 在没有显式运算符的情况下,测试和操作由隐式逻辑and(
)连接-a
和-a
应用短路(见下文)-o
- 子表达式可以与
和\(
组合以改变优先级(\)
-转义是为了保护括号不被shell解释)\
- 优先级(最高优先):
,\(…\)
代码>,
,-a
-o
- 在没有显式运算符的情况下,测试和操作由隐式逻辑and(
- 关于测试和行动的顺序问题。
- 相比之下,
选项不是位置选项,但是GNUfind
默认情况下会发出警告,如果它们没有放在测试和操作之前。为了避免警告,并且为了概念的清晰,最好这样做find
- 相比之下,
- 每个测试和操作都返回一个布尔值,短路应用:
- 在典型情况下-隐含
-这意味着一旦先前的测试或操作返回false,则不会评估后续测试和操作:-a
find-错误-打印#-未执行打印
- 类似地,如果第一个操作数返回true,则不会执行
(-o
)表达式的第二个操作数:-或
find-打印-o-打印#!!第二次-未执行打印
- 在典型情况下-隐含