如何删除创建的文件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)
首先,查找在特定时间创建的文件有点困难,因为创建时间通常不会保存在任何地方或很难获得。您拥有的是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
指向另一个目录。)
只是 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)