我想删除我当前所在目录中今天创建的所有文件。
因此,如果今天是 4 月 3 日,那么我请求的 UNIX 命令将删除 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
答案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 作业,这将很有用。但是,它并不能准确回答您的问题。
答案2
如果你可以使用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 文件属性中与创建时间最接近的近似值。