删除特定日期之前创建的所有文件

删除特定日期之前创建的所有文件

我有一个包含大量文件的目录(例如一年中每一天的日志)。我想删除 22/11 之前创建的所有文件。我怎样才能做到这一点?我必须使用findexec-rm吗?我正在使用 ksh。

答案1

使用find仍然是删除文件的首选方式。看http://mywiki.wooledge.org/UsingFind了解更多。

一种方法是创建一个包含时间戳的文件。例如

touch -t 201311220000 /tmp/timestamp

find现在删除与时间戳匹配的GNU 文件(假设在当前目录中),例如:

find . -type f ! -newer /tmp/timestamp -delete  

或非 GNU 查找

find . -type f ! -newer /tmp/timestamp -exec rm {} \;

答案2

对于 GNU 或某些 BSD find

find . ! -newermt 2013-11-22 ! -type d -delete

请注意,它会检查文件的最后修改时间。在某些 BSD 上,您可以使用-newerBtin 代替来-newermt检查文件的 inode出生如果有时间的话。

请注意,它还会准确地删除在 2013-11-22 00:00:00.0000000000 创建的文件,并不是说任何时钟都那么精确,但这可能会导致任意设置时间戳的文件出现问题,例如使用touch -d 2013-11-22T00:00:00 some-file(或touch -d 2013-11-22有一些touch实施)。您始终可以将其更改为! -newermt '2013-11-21 23:59:59.999999999999'(GNU)或! -newermt '2013-11-21 23:59:59'(BSD),尽管这会错过2013年11月21日最后一秒内最后修改的文件)。

答案3

find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;

例子:

find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;

在这种情况下,它将删除所有以“ORA_XEO”开头且时间超过 15 天的文件。

相关内容