查找和删除具有特定日期的文件

yae*_*ael 6 linux find rm

如何删除创建的文件Aug 7的名称DBG_A_sql*/tmp

如以下示例:

-rw-r--r-- 1 root    root   51091 Aug  7 11:22 DBG_A_sql.2135
-rw-r--r-- 1 root    root   15283 Aug  7 11:22 DBG_A_sql.2373
-rw-r--r-- 1 root    root   51091 Aug  7 11:22 DBG_A_sql.2278
-rw-r--r-- 1 root    root    9103 Aug  7 11:22 DBG_A_sql.2485
-rw-r--r-- 1 root    root    9116 Aug  7 11:22 DBG_A_sql.2573
-rw-r--r-- 1 root    root    9140 Aug  7 11:22 DBG_A_sql.2679
-rw-r--r-- 1 root    root   15695 Aug  7 11:22 DBG_A_sql.2897
Run Code Online (Sandbox Code Playgroud)

Rah*_*hul 14

您可以使用find. 根据您的要求和用途计算日期,

find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -print
Run Code Online (Sandbox Code Playgroud)

确认无误后删除

find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -delete
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`-newrct` 和`-ctime` 与_creation time_ 无关。他们是为了改变时间。 (2认同)

ilk*_*chu 9

首先,查找在特定时间创建的文件有点困难,因为创建时间通常不会保存在任何地方或很难获得。您拥有的是mtime,或上次修改时间,ctime即“更改”时间,更新对 inode 的任何更改。我假设你想要修改时间。


查找在给定日期修改的文件变得有点有趣,因为find似乎很难正确使用在午夜创建的文件。

如果我们知道相对时间(即昨天),我们可以使用 find -daystart -mtime 1,但它发现文件在错误的午夜修改,Aug 8 00:00。但是,这似乎有效:

find dir/ -daystart -mtime +0 \! -mtime +1 -ls
Run Code Online (Sandbox Code Playgroud)

如果不想计算相对时间,你find-newerXY

find dir/ -newermt 'Aug 7 00:00' \! -newermt 'Aug 8 00:00' -ls
Run Code Online (Sandbox Code Playgroud)

同样,这会导致完全在午夜创建的文件错误,因为比较是“较新”,而不是“较新或一样旧”。尽管如果您的系统具有亚秒级的时间戳精度,则可能很难达到该精度,但是如果您使用touch...

一个毛茸茸的解决方法是这样的:

find dir/ -newermt 'Aug 6 23:59:59.999999999' \! -newermt 'Aug 7 23:59:59.999999999' -ls
Run Code Online (Sandbox Code Playgroud)

在任何情况下,添加必要-name "DBG_A_sql*"的只取正确名称的文件。您可以将-ls末尾替换-delete为删除文件而不是列表。(-ls-delete并且-newerXY至少存在于 GNU find 和 OS X 上的 BSD find 中。)


当然,您实际上可以解析日期的文本表示,但是ls如果某些小丑创建的文件中包含不可打印的字符,则很难正确解析。当然,示例文件没有这样的文件,但一般来说,任何人都可以创建它们,尤其是在/tmp.

(尽管| xargs rm您会错过这些文件,并且由于文件名不能包含斜杠,因此任何人都很难将您rm指向另一个目录。)


Cos*_*tas 5

只是 bash 循环

for file in /tmp/DBG_A_sql* ; do
    [ "$(date -I -r "$file")" == "2016-08-07" ] && rm "$file"
done
Run Code Online (Sandbox Code Playgroud)