2012-01-20 43 views
0

我想按創建順序列出所有文件,而不是目錄。我試過:如何按照創建順序遞歸列出目錄中的文件?

ls -R 

它獲取所有的文件,有一些煩人的格式,我寧願一行一行。但是,我的* nix-foo相當薄弱,我不確定如何按創建日期排序。

最終,這將在Ruby腳本中完成,所以如果它不可能用一個神奇的bash命令,那麼一些Ruby代碼是好的;我只是認爲它可能是有趣的,並可能更清潔使用bash。

+0

LS-RT 參見[bash的列表,文件按上次編輯的最新] [1] [1]:http://stackoverflow.com/questions/1404938/bash-list-files-by-last-edited-date – Chargaff

+0

差不多,但我想要他們創建的訂單,而不是編輯日期 – qui

回答

1

不幸的是,Linux不存儲創建日期。 Mac OS可以,但它並不是便攜式,易於閱讀的格式。 Windows是唯一一個存儲它的系統,但是Ruby沒有任何允許你訪問它的內在命令。

仔細閱讀Ruby的ctime,經常誤讀,表明它只支持「更改」時間。下面是ctime的文檔從FileFile::Stat

返回更改時間的文件(即,有關該文件的時間目錄 信息被改變,而不是文件本身)。

+0

悲傷的時候,但是謝謝。 – qui

+0

@qui,這裏是Stack Overflow的[search](http://stackoverflow.com/search?q=%5Blinux%5Dctime&submit=search),討論Linux的問題。在結果頁面的搜索框中替換選擇的操作系統。 –

1
Dir['**/*'].reject { |f| File.directory?(f) }.sort_by { |f| File.ctime(f) } 
0

GNU找到可以幫助你,先試試這個

find . -type f -printf "%C+\t%M\t%p\n" | sed 's/+/ /' | sort -t" " +0 -1 

它可能工作。

但是,我使用

find (GNU findutils) 4.4.2 

我不能讓%C+啄工作。

所以我想出了一個長手的printf格式字符串,作爲一個額外的好處,不需要sed後處理。

find . -type f -printf '%CY-%Cm-%Cd.%CH%CM%CS\t%M\t%p\n' | sort +0 -1n 

其中給出像

2011-03-30.141038.0000000000 -rw-r--r--  ./pkgs/libxml2/libxml2-22011-03-30.140959.0000000000 -rwxr-xr-x  ./pkgs/libxml2/libxml2-2.7.7/doc/examples/.libs/reader3.exe 
2011-03-30.141001.0000000000 -rwxr-xr-x  ./pkgs/libxml2/libxml2-2.7.7/doc/examples/.libs/reader3_ltshwrapper 
2011-03-30.141001.0000000000 -rwxr-xr-x  ./pkgs/libxml2/libxml2-2.7.7/doc/examples/reader3.exe 
2011-03-30.141002.0000000000 -rw-r--r--  ./pkgs/libxml2/libxml2-2.7.7/doc/examples/.deps/tree2.Po 
2011-03-30.141002.0000000000 -rw-r--r--  ./pkgs/libxml2/libxml2-2.7.7/doc/examples/tree2.o 

每個時間戳尾隨.0000000000輸出爲小數秒,這顯然是我的系統不記錄。您可以使用%TX獲得HH:MM:SS格式。

如果您需要文件列表中的其他字段(我將權限作爲附加信息投入),請執行man find,然後搜索-printf。有很多參數可用於根據需要設置格式。

我注意到你說'想要訂單他們被創造'。 Unix有它存儲的文件,其中不包括創建時間三個時間戳記,所以你可以使用顯示的信息爲

%A File's last access time 
%C File's last status change time 
%T File's last modification time 

人們通常認爲,%C必須意味着創建時間,但是當你看到abouve,它是'狀態更改時間',我認爲是上次任何文件權限已更改。因此,對於可能的情況,這將是文件創建時間,但它不是保證。 (SP)。

該聯機幫助頁並未指出,因爲Windows存儲了創建時間,您可以使用find來獲取它。任何人?

我希望這會有所幫助。