2013-02-05 77 views
13

我在目錄中有一組文件。我需要找到一組特定日期的文件(例如,如果我需要從1月16日到1月20日的文件)。我嘗試使用ls -ltr | grep <date>,但它要花費太多的步驟才能完成選擇文件。有沒有更簡單的方法來完成這件事。謝謝!如何在Unix中使用ls查找特定日期文件的文件

+0

詞shash,有一個思考關於接受的答案,我想,發現可能是作業的更好的工具。 – paxdiablo

+0

@paxdiablo好的,甚至會嘗試 – Shash

回答

20

我不知道你有多少個文件在目錄,但這樣的事情應該是快如閃電:

ls -al | awk '$6 == "Jan" && $7 >= 16 && $7 <= 20 {print $9}' 

在我的系統,我看到日期稍微修改了以下:

pax> ls -al | awk '$6 == "Jan" && $7 >= 16 && $7 <= 29 {print $9}' 
kids_shares.ods 
our_savings.gnumeric 
photos 

pax> ls -ald kids_shares.ods our_savings.gnumeric photos 
-rw-r--r-- 1 pax pax 51005 Jan 29 19:39 kids_shares.ods 
-rw-r--r-- 1 pax pax 2275 Jan 28 14:48 our_savings.gnumeric 
drwxrwxrwx 130 pax pax 4096 Jan 29 21:47 photos 

您可以看到日期與給定文件匹配。

需要注意的一件事:如果文件最近,它會在第8列有一段時間。超過某個年齡段,ls開始把年份放在那裏。我有一個模糊的回憶,說它在六個月大的邊界附近,但我並不完全確定。你也需要迎合這一點。

+1

工作得很好... – Shash

9

改爲使用find(1),那會容易得多。

find . -mtime -$start -mtime +$end 
+0

'find'有一個'-newer'標誌(看看它是否比另一個文件更新),但不幸的是不是'-older'。我不確定它適合這些特定的日期範圍。 – paxdiablo

+0

@paxdiablo它是合適的,我只是增加了一個例子(另外,發現有'!'(不))運算符 – wich

+0

哦,我沒有想到這一點。好決定。 – paxdiablo

7

你最好用find。首先創建兩個具有特定時間的臨時文件以在其間進行搜索。 touch可以這樣做:

touch -t "201301160001" ./start 
touch -t "201301202359" ./finish 

然後運行find

find /path/to/files -type f -newer ./start ! -newer ./finish 
+0

實際上,這兩種基於查找的解決方案都可能比我的更好 - 如果您不想進入子目錄,可能需要使用maxdepth。兩者皆爲+1。 – paxdiablo

+0

@paxdiablo:謝謝你的伴侶。我回報了,因爲(儘管我不喜歡解析'ls'輸出),OP _did_希望這樣做,'awk'是一個不錯的選擇。 – Steve

+0

這對我來說是非常好用的,但在腳本中使用時(無論是使用'./ script.sh','bash script.sh'還是'source script.sh'),都不會返回結果。我認爲這是與爆炸有關的。當我使用'bash -x'調試時,它被單引號包圍;以這種方式運行命令不會返回任何內容 – rensa

相關問題