根据年份删除文件

根据年份删除文件

我需要删除 2009 年创建的目录中的所有文件。我可以使用什么命令来执行此操作?

答案1

大多数文件系统不存储文件的创建时间,因此您最多可以检查文件的上次修改时间。

如果您有最新版本的 GNU find(例如在 Linux 或 Cygwin 上)或 FreeBSD 或 OSX,您可以直接将一个文件的日期与另一个文件的日期进行比较。此外,B如果您的系统上可用,这些版本的 find 可以使用文件创建时间(称为其诞生时间,用 指示)。替换Bm以下以使用修改时间而不是出生时间。

find /path/to/directory -newerBt '2009-01-01' ! -newerBt '2010-01-01' -type f -delete

无需先运行一次,-delete以确保这些是您想要的文件。上面的命令也会删除子目录中的文件;如果不需要,请-mindepth 1 -maxdepth 1在目录名称后添加。

如果您的版本find没有-newerXY主版本,则需要创建时间戳文件来标记要匹配的时间范围的边界。

touch -t 200901010000 /tmp/from
touch -t 201001010000 /tmp/to
find /path/to/directory -newer /tmp/from ! -newer /tmp/to -type f -exec rm {} +

兹什的全局限定符可以匹配某个时间间隔内的文件,但只能指示相对于当前日期的边界(例如几天前)。

rm /path/to/directory/*(.m+566^m+931)

您还可以使用时间戳文件来获取精确的日期,但您会失去简洁性。

touch -t 200901010000 /tmp/from
touch -t 201001010000 /tmp/to
rm /path/to/directory/*(.e\''[[ $REPLY -nt /tmp/from && $REPLY -ot /tmp/to ]]'\')

答案2

其他人已经说过find,但您可能还想查看一下tmpwatch

答案3

具有适当选项的命令find应该能够完全执行您想要的操作。

由于您提出的问题非常像家庭作业,因此我将彻底阅读手册页作为有线索的人的练习;本教程@jfgagne 提供的应该会有很大帮助。

相关内容