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

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

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

因此,如果今天是 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 {} +

受限于findAIX 的命令,您可以轻松删除过去 24 小时内的文件:

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

不幸的是,findAIX 中的实用程序没有-daystart将时间与日期边界而不是当前时间进行比较的选项。

此外,ctime 实际上是指 inode 修改时间(而非创建时间),但它是标准 UNIX 文件属性中与创建时间最接近的近似值。

相关内容