2011-05-05 148 views
16

我确定这是直接的,并在某个地方回答,但我没有设法找到我正在寻找的东西。基本上,我试图运行一个cron脚本来每7天清除给定目录的内容。到目前为止,我曾尝试以下,使用find来删除所有的子目录(及其文件)

find /myDir -mtime 7 -exec rm -rf {} \; 

然而,这也将删除父目录MYDIR,我不想要的。我也试过,

find /myDir -type f -type d -mtime 7 -delete 

这似乎什么都不做。我也试过,

fnd /myDir -type d -delete 

其全部删除,但父目录,就像我所需要的。然而,一个警告消息上来阅读,

相对路径可能并不安全

我会很感激,如果任何人都可以纠正我的脚本,以便安全地删除文件夹中的所有子目录。

非常感谢。 =)

更新:我决定去以下,

find /myDir -mindepth 1 -mtime 7 -delete 

基于我从所有谁回答教训。再次,非常感谢大家。

+0

正如其中一个回复所述,您的最终命令应该是'find/myDir -mindepth 1 -mtime 7 -delete'。请注意'+ 7'而不是'7'。前者删除7天以上的所有内容,后者删除7天前的所有内容。 – jkukul 2016-11-25 13:11:39

回答

12

尝试:

find /myDir -mindepth 1 -mtime 7 -exec rm -rf {} \; 
+2

虽然在执行过程中我收到了一条消息,指出每个文件/目录删除了'没有这样的文件或目录'。想知道这是否完全正常?非常感谢。 mindepth开关非常有用,我甚至不知道它存在! – infmz 2011-05-05 13:54:58

+0

我通过使用-delete而不是-exec rm稍微改变了这个。我没有收到任何警告/错误。这是你认为的一个好方法吗? – infmz 2011-05-05 14:14:23

+0

@infmz:我不是-exec的忠实粉丝,因为它会为每个找到的文件产生一个进程,如果您匹配大量文件,这是可怕的,所以我不确定为什么会出现错误。我假设-delete因为这个原因而被执行。 fwiw我会将结果传送到xargs -l2000 rm -rf。 – linuts 2011-05-06 17:36:26

6

什么

cd myDir/ ; find . -type d -delete 

假设你从myDir父目录运行此。

如果你不能保证MYDIR存在,那么这是更安全:

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

@infmz:不客气。如果你认为这是一个很好的回答你的问题,然后接受它作为答案(这就是计算器的工作方式) – MarcoS 2011-05-05 11:55:23

+0

感谢提醒,我知道它是如何工作的。 =)当我选择一个最佳解决方案时,我会做。 – infmz 2011-05-05 13:16:16

+0

如果myDir不存在,该怎么办?光盘失败,找到从当前目录开始删除..不安全是不是? – 2013-06-21 17:26:13

6

find /myDir -mindepth 1 -mtime 7 -delete

大概应该是

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

(或者mtime +6)。 +意味着7天或7天以上的事情,而不是7天。

相关问题