find /home/ -mtime +25 -exec rm -rf {} \; 2> /dev/null
上面命令的输出是什么以及它是如何工作的
-exec
{}
\;
命令中的内容
答案1
有问题的命令发现任何姓名(文件、目录或其他)/home
(包括/home
其自身)下的修改时间至少为 25 天前,并删除这些名称。如果该名称引用一个目录,则整个目录树将被删除。
由于所涉及的命令均未写入标准输出,并且诊断消息被重定向到/dev/null
.如果该find
实用程序尝试处理已删除的目录,则可能会生成看不到的错误消息。使用-depth
可确保目录树是自下而上而不是自上而下处理的。
-exec
将用于find
调用外部命令。将{}
替换为找到的名称并\;
表示外部命令结束。
请注意,该命令还将匹配并递归删除/home
自身,如果它足够老的话。目录上的修改时间戳仅更新文件或目录立即地目录下的文件被添加或删除,因此除非您在过去 25 天内完成了该操作,否则我希望该命令能够删除/home
及其所有内容(如果它以 root 权限运行)。
添加或删除 的子目录中的文件/home
不会更新 的时间戳/home
。
如果以非 root 权限运行,则/home
属于当前用户的所有文件、目录等,如果它们或其任何父目录(例如/home
)足够旧,都将被删除。
如果您只想删除常规文件,那么我建议
find /home -type f -mtime +25 -exec rm -f {} +
该-type f
测试仅允许常规文件通过。使用-exec ... {} +
而不是-exec ... {} \;
意味着将发生尽可能少的调用rm
(将收集并传入几个名称{}
)。
或者,如果您find
支持-delete
:
find /home -type f -mtime +25 -delete
要查看删除的内容,请-print
在之前-exec
(或之前-delete
)插入。要以交互方式提示每次删除,请使用-ok
代替-exec
(在这种情况下不要使用-delete
,并且不要将标准错误重定向到/dev/null
)。
答案2
这是对找到的模式执行的操作,
在 /home 中查找 mtime 超过 25 天的任何文件,然后将其删除
mtime 是 24 小时前修改的时间,为 number*24 小时。
-对代表找到的模式的 {} 执行命令 & \;是命令结束标记