Bash:基于文件日期时间戳删除文件

12

我有一个文件夹里有很多文件。我需要删除所有在7月1日之前创建的文件。如何在Bash脚本中做到这一点?

2个回答

24
我认为以下代码可以满足您的需求:
touch -t 201007010000 dummyfile
find /path/to/files -type f ! -newer dummyfile -delete

第一行创建了一个文件,该文件的最后修改时间为2010年7月1日。第二行查找位于/path/to/file中日期不晚于dummyfile的所有文件,然后将它们删除。
如果您想要双重检查其是否正常工作,请删除-delete参数,它应该只列出将被删除的文件。

去掉 'f' 前面的 '-' 后,现在似乎列出了所有文件。如果我去掉 '!',它只会列出更新的文件。 - David Oneill
1
哦,对不起,不应该有一个“-f”,只需要“f”。 - bramp
不用在意我之前的评论。它只显示旧的评论。谢谢! - David Oneill
有没有一种方法可以删除在给定日期之后修改的文件?它可以很好地列出它们,例如在find /path/to/files -type f -newer dummyfile中没有“!”符号,但是-delete无法正常工作。将输出传递到带有rmfor循环中可以解决问题,但是有更简单的方法,对吗? - Tom Kelly
如果你的 find 命令缺少 -delete 选项,可以尝试使用 -exec rm {} +,如果你的 find 命令也不支持使用 +-exec 选项,则可以尝试使用 \; 替代。 - tripleee
显示剩余2条评论

9
这应该可以运行:
find /file/path ! -newermt "Jul 01"

为了找到您想要删除的文件,因此删除它们的命令应该是:
find /file/path ! -newermt "Jul 01" -type f -print0 | xargs -0 rm

Eric,"newerct" 是哪个版本的 find 呢?我在任何 man 页面上都找不到它的信息。 - bramp
@bramp:GNU find 有这个选项。然而,Unix/Linux 没有创建日期的概念,所以我会使用 -newermtc 是指 inode 的状态更改,而不是“创建”。 - Dennis Williamson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接