2015-06-18 37 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

相關問題