用于在今天的日期删除/删除文件的UNIX命令


2

我想删除当前创建的目录中的所有文件。

因此,如果今天是4月3日,那么我要求的UNIX commond会删除someFile2,someFile3,someFile4和someFile5。此命令不会删除someFile1。

someUser@:/someDirectory$ ls -lrt
-rw-r--r--    1 someUser someUser       4242 Mar 30 12:12 someFile1.dat
-rw-r--r--    1 someUser someUser          0 Apr 03 12:12 someFile2.dat
-rw-r--r--    1 someUser someUser   42424242 Apr 03 12:12 someFile3.dat
-rw-r--r--    1 someUser someUser          0 Apr 03 12:12 someFile4.dat
-rw-r--r--    1 someUser someUser     424242 Apr 03 12:12 someFile5.dat

我的操作系统是AIX。

目前,我一遍又一遍地运行以下四个命令以实现此目的,这需要花费很多时间,因为我正在测试并且需要经常删除这些文件。文件名总是不同的(时间戳在真实文件名中使用)

rm someFile2.dat
rm someFile3.dat
rm someFile4.dat
rm someFile5.dat

你可以在Unix.SE得到一个更好的答案
warren

Answers:


1

您可以采用两种不同的方法来回答这个问题:

  • 您说文件名包含时间戳。您可以使用通配符和时间戳的组合从目录中删除文件: $ TODAYDATE=`date '+%Y%m%d'` $ rm *${TODAYDATE}.dat

  • 您可以使用find-newer选项(您必须使用较新的选项,因为AIX的内置find没有那么多选项):首先创建一个文件,其具有从您想要搜索为mtime时的开始时间: $ TODAYDATE=`date '+%Y%m%d'` $ touch -m -t "${TODAYDATE}0000" /tmp/time_marker 查找文件哪个比那个文件更新 $ find . -type f -newer /tmp/time_marker -exec rm {} \;

  • 您还可以使用更简单的版本find $ find . -type f -ctime -1 -exec rm {} \;

这将找到过去24小时内制作的所有文件。如果你每天23:59左右运行一个cron作业,这很有用。但是,它并没有完全回答你的问题。


1
这将适用于我的个人情况,rm *20140403*但如果文件名不包含时间戳呢?如果没有更好的答案,我会接受你的回答。谢谢!
javaPlease42 2014年

好吧,你在问题中说文件包含时间戳。在第二篇文章中,我将解释如何查找名称中没有时间戳的文件。
mtak 2014年

0

如果你可以在机器上使用GNU findutils,那么最好的选择是删除当前目录中的文件:

find -maxdepth 1 -daystart -ctime 0 -type f -delete

此命令将显示将删除的内容:

find -depth -maxdepth 1 -daystart -ctime 0 -type f -exec ls -cld {} +

仅限find于AIX中的命令,您可以轻松删除过去24小时内的文件:

find -maxdepth 1 -ctime 0 -type f -exec rm {} \;

遗憾的是find,AIX中的实用程序没有-daystart使得时间与日期边界而不是当前时间进行比较的选项。

事实上,ctime也是inode修改时间(不是创建时间),但它是标准UNIX文件属性中创建时间最接近的近似值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.