Bash 使用“查找”删除所有子目录(及其文件)

Bash 使用“查找”删除所有子目录(及其文件),bash,recursion,find,subdirectory,rm,Bash,Recursion,Find,Subdirectory,Rm,我相信这是直截了当的回答,但我没有找到我要找的东西。基本上,我正在尝试每7天运行一个cron脚本来清除给定目录的内容。到目前为止,我已经尝试了以下方法 find /myDir -mtime 7 -exec rm -rf {} \; find /myDir -mindepth 1 -mtime 7 -delete 但是,这也会删除父目录myDir,我不希望这样。我也试过, find /myDir -type f -type d -mtime 7 -delete fnd /myDir -typ

我相信这是直截了当的回答,但我没有找到我要找的东西。基本上,我正在尝试每7天运行一个cron脚本来清除给定目录的内容。到目前为止,我已经尝试了以下方法

find /myDir -mtime 7 -exec rm -rf {} \;
find /myDir -mindepth 1 -mtime 7 -delete
但是,这也会删除父目录myDir,我不希望这样。我也试过,

find /myDir -type f -type d -mtime 7 -delete
fnd /myDir -type d -delete
似乎什么也没做。我也试过,

find /myDir -type f -type d -mtime 7 -delete
fnd /myDir -type d -delete
它删除了除父目录之外的所有目录。然而,一条警告信息出现了,上面写着

相对路径可能不安全

若有人能纠正我的脚本,使其安全地删除文件夹中的所有子目录,我将不胜感激

非常感谢

更新:我决定采取以下行动:

find /myDir -mtime 7 -exec rm -rf {} \;
find /myDir -mindepth 1 -mtime 7 -delete
根据我从所有回复者那里学到的。再次感谢大家。

试试:

find /myDir -mindepth 1 -mtime 7 -exec rm -rf {} \;
那怎么办

cd myDir/ ; find . -type d -delete
假设您从父目录
myDir
运行此命令

如果您不能保证myDir存在,那么这更安全:

cd myDir/ && find . -type d -delete

find/myDir-mindepth 1-mtime 7-delete

应该是


find/myDir-mindepth 1-mtime+7-delete


(或者可能是
mtime+6
)。
+
指的是7天或更久的东西,而不是7天。

@infmz:不客气。如果您认为这是您的问题的一个好答案,那么接受它作为答案(这就是stackoverflow的工作方式)谢谢提醒,我知道它是如何工作的。=)当我选择一个最好的解决方案时,我会这样做。如果myDir不再存在怎么办?cd失败,从当前目录开始查找delete。。不安全,不是吗?@MarcoMartinelli如果myDir不存在了,那么它的内容也不存在了。。。因此,您不需要删除任何内容,我想您是对的,但例如,我正在使用一个类似于
find/myDir-mindepth 1-mtime 7-delete的cron作业,其中/myDir是由另一个脚本自动创建的。现在,如果/myDir不存在,那么就放弃。在这种情况下,只需假设您位于正确的目录中。顺便说一句,您的解决方案是有效的,我的评论是针对unix世界中可能没有考虑到这一点的新手的。虽然在执行时,我收到一条消息,对每个删除的文件/目录都说“没有这样的文件或目录”。想知道这是否完全正常?非常感谢。mindepth开关非常有用,我甚至不知道它的存在!我使用-delete而不是-exec-rm稍微改变了这一点。我没有通过这种方式收到任何警告/错误。你认为这是一个好方法吗?@infmz:我不太喜欢-exec,因为它会为找到的每个文件生成一个进程,如果你匹配大量文件,这很可怕,所以我不确定你为什么会出错。我假设-delete就是出于这个原因实现的。fwiw我会将结果传输到xargs-l2000 rm-rf.message“没有这样的文件或目录”,因为在目录中的文件之前查找列表目录,然后它会删除第一个目录,然后尝试删除目录中的文件(刚刚删除)注意
-delete
(在手册页中找不到它,但在我的机器上是正确的)。如其中一个回复中所述,您的最后一个命令可能是
find/myDir-mindepth 1-mtime 7-delete
。注意
+7
而不是
7
。前者删除超过7天的所有内容,后者删除正好7天的所有内容。