我有一个包含大量文件的目录(例如一年中每一天的日志)。我想删除 22/11 之前创建的所有文件。我怎样才能做到这一点?我必须使用find
exec-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 上,您可以使用-newerBt
in 代替来-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 天的文件。