假设今天是 4 月 8 日,我在 bash 中执行以下操作。
cd /tmp
mkdir hello
touch -d 2015-04-01 hello
然后,假设我想删除 /tmp 中所有早于一天的文件,但不是目录,我执行以下命令:
find /tmp -mtime +1 -delete -type f
如果目录“hello”不是文件,为什么会删除它?
谢谢!
假设今天是 4 月 8 日,我在 bash 中执行以下操作。
cd /tmp
mkdir hello
touch -d 2015-04-01 hello
然后,假设我想删除 /tmp 中所有早于一天的文件,但不是目录,我执行以下命令:
find /tmp -mtime +1 -delete -type f
如果目录“hello”不是文件,为什么会删除它?
谢谢!
find 命令按顺序执行表达式。既然-delete是 before -type,-type就永远不会到达。尝试:
find /tmp -mtime +1 -type f -delete
-mtime ...。称它们为“选项”是可以理解的,但由于它们不是选项这一事实是问题的原因,因此需要find仔细研究它们的术语和概念:
-type f)-delete)-maxdepth 1) - 请注意,此类选项与标准选项不同,标准选项甚至必须位于输入路径之前(例如,find -L /tmp ...)find中的更细粒度。forfind,其中所有三个构造都由一个名称调用, primaries ( BSD也 find只在其页面中使用primaries )。man-a( ) 表示逻辑 OR,( )表示否定;括号中的替代形式不符合 POSIX,但受 GNU 和 BSD find 支持。-and-o-or!-not-a)连接。-a并-o应用短路(见下文)\(并\)改变优先级(\-转义是为了保护括号不被shell解释)。\(...\), !, -a,-ofind 相比之下,options不是位置的,但如果它们没有放在测试和操作之前, GNU默认会发出警告。 为了避免警告,并且为了总体上的概念清晰,最好这样做。find-a隐含 - 这意味着一旦先前的测试或操作返回 false ,则不会评估后续测试和操作:
find . -false -print # !! -print is NOT executed-o同样,如果( ) 表达式的第二个操作数-or返回 true,则不会执行第一个操作数:
find . -print -o -print # !! 2nd -print is NOT executed