2015-06-18 44 views
0

我需要查找在过去12小时内修改过的文件。但是,目录非常大,因此使用常用的find命令花费的时间太长。Linux - 如何在没有查找命令的情况下查找在过去12小时内更改的文件

任何人有任何想法更快做到这一点?我正在考虑像列出文件,然后使用头获得前20名,然后只检查这些文件。但我不确定。

任何帮助?

更新:感谢所选答案的帮助,我们发现您可以在不使用find命令的情况下实际找到文件。诀窍是时间戳的文件名,然后用下面的代码来获取最新的一个:

ls -1 /directory/files*.txt | sort -nr | head -1

+0

目标是,您添加一些自己的代码,以显示您至少自己为解决此问题所做的研究工作。 – Cyrus

+0

我写了,但Marki555得到了我想说的东西,像'ls。 |头-20 | find -mtime' – DomainsFeatured

+0

不,你在bash中wh起的东西可能比'find'快。真正解决问题的唯一方法是减少必须查看的文件数量。 – Sammitch

回答

0

文件修改时间被存储在它的inode。因此,无论您使用什么命令,都必须读取该目录中所有文件的inode。您可以制作自己的脚本来检查mtime,但速度不会更快。

清单目录内容(文件名只)的真快,尝试用ls -1LS减去一个),但与文件,列出其属性,如修改时间慢:ls -lLS减去小大号)。

目录中的文件列表是由文件系统以“随机”顺序读取的(顺序取决于很多东西,但是是静态的)。所以你不能使用像在X个文件后停止的事情。 ls -t列出按mtime排序的文件,但它必须读取所有文件的mtime才能对它们排序。

+0

我看,谢谢你的信息。我猜最快的方法可能是每日/每周将旧文件移出该目录?我真的认为有一个比这更好的方法: -/ – DomainsFeatured

+0

最好的办法是不要在那里有太多的文件...每天或每月使用子目录,并在那里创建文件...如果这是不可能的,做一个符号链接(例如'current')指向当前的日期 - 目录,并且每一天都将其更改为新的目录。 – Marki555

+1

好吧,等等,@ Marki555,你刚才说得很好。如果ls -1(减1)更快,文件名实际上是时间戳,所以我可以执行以下操作:'ls -1/directory | sort -nr |头-20 |找到-mtime 0.25',它应该工作得更快:-) ....总之,时间戳文件名,列出它,对它进行排序,然后找到。漂亮的团队合作。 – DomainsFeatured

相关问题