2016-04-11 56 views
0

我在用|分類閱讀訂購的文件。但是當我做使用find讀取最新文件名

files=($(find /test/ | sort)) 

在目錄/測試,我得到的文件名以不同的順序。

ls -lhtr 

我該如何獲取文件名以相同的方式排序ls -lhtr?我想先閱讀最新的文件名..

+0

您必須安排以可排序的格式打印修改時間以及名稱(例如,日期+時間的YYYY-mm-dd HH:MM:SS或Unix時間戳記 - 自1970年以來的秒數-01-01 00:00:00 +00:00)。一個簡單的排序會產生最後的最後一個順序,就像'ls -lhtr'會給你的那樣。調查'find'中的'-printf'是否可以適當地打印修改時間。 –

+0

@JonathanLeffler,我正在使用 'find/test/-printf「%TY-%Tm-%Td%TT%p \ n」| | sort -n' 但我最先得到最早的文件..我應該怎麼做最先得到最新的? – jimmy

+0

將代碼用反引號括起來。你的建議看起來幾乎是合理的,但你不想做數字排序。 ISO 8601格式日期使用常規排序進行排序。因此:'find/sapfiler/WEBADM/test/-printf'%TY-%Tm-%Td%TT%p \ n「|排序'應該工作,只要你沒有在名稱中帶有換行符的文件。 –

回答

0

將多個註釋轉換爲答案。

您必須安排打印修改時間以及可排序格式的名稱(例如YYYY-mm-dd HH:MM:SS日期+時間或Unix時間戳 - 秒自1970-01-01 00:00:00 +00:00)。一個簡單的排序會產生最後的最後一個順序,如ls -lhtr會給你。調查GNU find中的-printf - 它可以適當地打印修改時間。

我正在使用find /test/ -printf "%TY-%Tm-%Td %TT %p\n" | sort -n,但我得到的是最早的文件。我應該怎麼做最先得到的?

你的建議看起來似乎似乎合理,但你不想做數字排序。 ISO 8601格式日期使用常規排序進行排序。因此:

find /sapfiler/WEBADM/test/ -printf "%TY-%Tm-%Td %TT %p\n" | sort 

應該工作,首先列出最舊的文件,只要您沒有名稱中帶有換行符的文件。

如果您想要以最新的優先順序,您需要按相反的時間順序進行排序,所以sort -r而不是僅僅是sort

find /sapfiler/WEBADM/test/ -printf "%TY-%Tm-%Td %TT %p\n" | sort -r 

請注意,這與ls -lhtr提供的順序相反,該順序列出了最新的最後一個文件。