/data/oozie-admi/
文件夹包含多个目录。
此命令
find /data/oozie-admi/ -type d -ctime +1 | xargs rm -rf [0]
已删除/data/oozie-admi/
文件夹。需要找出文件夹将被删除的情况。
答案1
U&L 上的此页面很好地描述了命令ctime
中的作用find
:
根据
find
手册页,-ctime n File's status was last changed n*24 hours ago. +n for greater than n
因此
-ctime +1
意味着文件状态一定至少在 48 小时前发生了改变。
将-type d
指定仅返回目录。
因此find /data/oozie-admi/ -type d -ctime +1
将匹配具有以下项的任何和所有目录不是在过去 48 小时内已发生改变。
举例来说,如果您有一个/data/oozie-admi/fish
创建于 48 小时前且在 48 小时内该文件夹中发生大量更新的文件夹,那么该文件夹将被排除在您的匹配之外,但/data/oozie-admi/
除非其中的文件发生更改,否则不会被排除。
xargs rm -rf
会删除传递给它的所有目录。这非常危险,因为如果在根文件夹 ( /data/oozie-admi/
) 中没有创建或删除任何文件,则更改时间将不会更新,您的/data/oozie-admi/
文件夹将被删除。
因此,如果目录更改日期超过 48 小时之前,该行脚本实际上将删除该目录或任何子目录。
我不确定这个[0]
应该做什么。通过快速搜索,我发现如果你在“if True”类型语句但是您没有if
声明。充其量,这看起来会作为参数传递给命令rm
,因此您将删除正在运行脚本的任何目录中命名的目录[0]
以及您的/data/oozie-admi/
目录。
答案2
我认为你需要的是:
find /data/oozie-admi/ -mindepth 1 -type d -ctime +1 | xargs rm -rf
或者:
find /data/oozie-admi/ -mindepth 1 -type d -ctime +1 -exec rm -rf +
这两个命令应该以相同的方式工作(在 Linux 上),对于大量文件夹,第二个命令更可靠一些。