2012-03-08 63 views
21

我想構建一個Linux命令,以列出特定目錄(和子目錄)中的所有文件(及其完整路徑)按訪問時間排序。列出目錄(和子目錄)中的所有文件(包含完整路徑),按訪問時間排序

ls可以按訪問時間排序,但不會給出完整路徑。查找給出了完整路徑,但是對訪問時間的唯一控制是使用-atime N(至少在24 * N小時前訪問)指定範圍,這不是我想要的範圍。

有沒有辦法按訪問時間排序並獲得完整路徑?我只能編寫一個腳本,但似乎應該有一種方法可以用標準的Linux程序來完成。

回答

20
find . -type f -exec ls -l {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7 

這將找到的所有文件,並通過日期,然後時間排序。然後,您可以使用awkcutls -l輸出

+0

工作得很好。我認爲這不受getconf ARG_MAX的限制? – Andrew 2012-03-10 00:04:51

+0

沒錯,它不受ARG_MAX的限制,因爲它不會將它作爲參數傳遞,而是用管道輸出。程序之間可以傳輸多少數據沒有限制。 – Alex 2012-03-11 17:22:01

+0

太棒了!謝了哥們!很好的瞭解這個限制,因爲我的目錄中有很多很多文件。 – Andrew 2012-03-12 12:16:40

11

你可以嘗試:

ls -l $(find /foo/bar -type f) 
  • 你可以添加其他選項(例如-t排序),以ls命令來實現你的目標。
  • 還可以添加你的搜索條件來find CMD
+1

我稍微修改這一點,得到了正是我想 LS -ult $(找不到目錄型的F)| grep -o「[^] \ + $」 謝謝! – Andrew 2012-03-08 17:09:20

+2

請記住,因爲'$(find DIRECTORY -type f)'的輸出被用作'ls -ult'的命令行參數,所以您將被限制爲'getconf ARG_MAX'文件 – Alex 2012-03-08 17:57:41

+0

感謝您的頭像亞歷克斯! – Andrew 2012-03-09 10:08:59

3

find . -type f | xargs ls -ldt提取日期,文件名應該做的伎倆只要不是你撞的命令一樣的參數限制和產卵LS的2個實例這麼多的文件。

1
find . -type f -exec ls -l --full-time {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7 

亞歷克斯的答案沒有爲我工作,因爲我有超過一年的文件和排序搞砸了。上面添加了--full-time參數,它將日期/時間值核心化,並使它們可排序而不管它們多大。

+0

'--full-time'參數在Mac OS X中不存在。@ Kent的解決方案效果很好。 – 2013-09-04 19:38:47

1
pwd | xargs -I % find % -type f 
相關問題