我會建議在輸出中爲unix時間戳添加另一個字段。在gnu find的-printf
格式字符串中,這表示爲%[email protected]
。
例如,排序的一切,你可以這樣做:
find/-type f -printf "%[email protected] Date: %TY-%Tm-%Td - Time: %TT - File: %f\n" \
| LC_ALL=C sort -n -k1,1 \
| cut -d' ' -f2-
sort -n -k1,1
在第一位(也是唯一的第一列)數值標準輸入排序線。 LC_ALL=C
環境變量僅用於偏執狂。根據語言環境,sort
的行爲有所不同。
最後cut
最後是如果您不希望它在輸出中刪除unix時間戳。
還有一些替代方案,我將簡要描述這些及其缺點。
如果你想這裏僅列出當前目錄(因此一個的MAXDEPTH)的文件,那麼你可以使用ls -al
和尋找開始-
而不是線d
或l
(用於過濾目錄和符號鏈接)。這是一種快速且骯髒的方式,以按排序順序獲取文件名並繼續前進。不要將它用於不可信的輸入或可能包含奇怪字符的文件名,它會以神祕的方式破解。
/bin/ls -latr | grep '^-'
警告有關分析的ls
輸出這裏(https://unix.stackexchange.com/questions/128985/why-not-parse-ls)
下面是一個更強健的做事方式(只對文件名中的換行符進行扼殺),並避免了在每個文件的基礎上產卵過程。我們感興趣的事情是時間戳(在這種情況下,mtime
(修改),這裏還有ctime
(創建)和atime
(訪問)。
您可以使用Perl從文件的訪問mtime
unix時間戳,在文件名之前打印(用空格分隔),在第一列上按數字排序,然後刪除時間戳。
find/-type f | head -n 1000 \
| perl -ne 'chomp; @a = stat($_); print($a[9], " ", $_, "\n");' \
| LC_ALL=C sort -n -k1,1 \
| cut -d' ' -f2-