我需要删除 2009 年创建的目录中的所有文件。我可以使用什么命令来执行此操作?
答案1
大多数文件系统不存储文件的创建时间,因此您最多可以检查文件的上次修改时间。
如果您有最新版本的 GNU find(例如在 Linux 或 Cygwin 上)或 FreeBSD 或 OSX,您可以直接将一个文件的日期与另一个文件的日期进行比较。此外,B
如果您的系统上可用,这些版本的 find 可以使用文件创建时间(称为其诞生时间,用 指示)。替换B
为m
以下以使用修改时间而不是出生时间。
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 提供的应该会有很大帮助。