我无法使用以下语法删除文件夹,您能帮忙吗?
任务:删除给定路径中超过 6 小时的文件和文件夹
find $file -name "*" -mmin +360 -exec rm -f {}\;
答案1
您的命令有 2 个问题。
该命令
rm -f dir
不会删除名为 的目录dir
。您需要使用该rmdir
命令或使用rm -r dir
.目录必须为空才能删除。如果您有一个文件
dir1/file1
,那么您所拥有的命令将dir1
首先尝试删除(这将失败),然后将尝试删除dir1/file1
.使用rm -r
将首先尝试清空目录。
第二部分的修复很简单,将-depth
标志添加到 find 命令中,告诉 find 按深度优先顺序处理文件。
第一部分的修复比较困难,并且具体取决于您想要做什么。
问题在于您的声明“删除给定路径中超过 6 小时的文件和文件夹”。如果您dir1
12小时前创建,然后dir1/file1
11小时前创建但一小时前修改,您想做什么?正如您的声明所示,您希望删除该目录,因为它是在 11 小时前添加文件时最后修改的,而不是删除该文件,因为它是在一小时前修改的。但是该文件需要目录。
我最好的猜测是你想删除空的自上次修改以来已超过 6 小时的目录。为了使事情更清楚,这里有一个带有多余括号的命令。你需要知道这-o
意味着or
。
find $file -depth -mmin +360 '(' '(' -type f -exec rm -f '{}' ';' ')' -o \
'(' -type d -empty -exec rmdir {} ';' ')' ')'
如果您的 find object 版本-empty
只是忽略它并忽略有关无法删除非空目录的错误消息。
答案2
寻找/目录-厘米分钟+分钟-删除
您可以在哪里使用该选项
-cmin
为创造的时间-mmin
修改时间-amin
对于访问时间
您可以根据您的情况使用,并请确保您提供正确的路径,/dir
否则可能会杀死您的整个操作系统。