find /data/oozie-admi/ -type d -ctime +1 | xargs rm -rf [0] 命令删除了 /data/oozie-admi/ 文件夹

find /data/oozie-admi/ -type d -ctime +1 | xargs rm -rf [0] 命令删除了 /data/oozie-admi/ 文件夹

/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 上),对于大量文件夹,第二个命令更可靠一些。

相关内容