PALMisLIFE 討論區

標題: [求助] unix shell command求助 [列印本頁]

作者: bibibo    時間: 2005-11-24 10:02
標題: [求助] unix shell command求助
又來求助了 B)
實在try不出來如何用find去找出最新file ><
我想寫一個shell, 可用來查出某路徑下最新檔案的名稱
不曉得有沒有example可以參考? B) 謝謝
作者: 溫開水    時間: 2005-11-24 10:35
標題: Re: [求助] unix shell command求助
比對檔案的建立時間? 應該不難吧
作者: AlgerChen    時間: 2005-11-24 10:51
標題: Re: [求助] unix shell command求助
如果你運氣好使用zsh

fileList=(${buildsdir}/*(.oc))
latestFile=${fileList[0]}

[ Last edited by AlgerChen on 2005-11-24 at 10:56 ]
作者: allenown    時間: 2005-11-25 01:27
標題: Re: [求助] unix shell command求助
find用力去查man就好啦 :p

看你最新檔案定義是什麼
find . -mtime -1 這樣就是前一天修改的檔案
很多方法啦 :p

不然可以用點小技巧
自己建立一個無用的檔案testfile  用來紀錄時間
在每次搜尋的時候
find . -newer testfile
touch testfile

這樣下次搜尋的時候就會找你這次搜尋之後更新的檔案了
作者: mirorman    時間: 2005-11-25 09:11
標題: Re: [求助] unix shell command求助
Originally posted by allenown at 2005-11-25 01:27 AM:
find用力去查man就好啦 :p

看你最新檔案定義是什麼
find . -mtime -1 這樣就是前一天修改的檔案
很多方法啦 :p

如果想要找某個目錄下最新的檔案, 又不知道是多久前修改的, 這樣就要從 -mtime -1 一直往前try, 似乎不理想.

不然可以用點小技巧
自己建立一個無用的檔案testfile  用來紀錄時間
在每次搜尋的時候
find . -newer testfile
touch testfile

這樣下次搜尋的時候就會找你這次搜尋之後更新的檔案了

我認為可以列出所有檔案, 再用ls -l列出mtime, 再根據mtime來排序, 自然可以得出最新的檔案.
作者: PipperL    時間: 2005-11-25 11:12
標題: Re: [求助] unix shell command求助
Originally posted by bibibo at 2005-11-24 10:02:
又來求助了 B)
實在try不出來如何用find去找出最新file ><
我想寫一個shell, 可用來查出某路徑下最新檔案的名稱
不曉得有沒有example可以參考? B) 謝謝


一行文:
find ./ -mtime -365 -exec stat -f "%Sm %N" -t "%Y%m%d%H%M%S" {} \; | sort | tail -n 1

裡面的 365是指 365 天內的。嫌太慢可以調小一點。
作者: yuyudiabo    時間: 2005-11-25 17:06
標題: Re: [求助] unix shell command求助
如果是在同一個目錄, 其實用 ls -alt |more 就會按時間排給你了
作者: bibibo    時間: 2005-11-25 17:20
標題: Re: [求助] unix shell command求助
謝謝各位前輩的幫忙
我是用csh去寫這個功能
幾過幾次測試..不能使用ls -lt , 因為我只要抓出最新檔案的檔案名稱B)
另外還試過
find ./ -mtime -365 -exec stat -f "%Sm %N" -t "%Y%m%d%H%M%S" {}  \; | sort | tail -n 1
我把L改寫成:
find ./ -print -mtime -365 -exec stat -f "%Sm %N" -t "%Y%m%d%H%M%S" {}  \; | sort | tail -n 1
可是出來的檔案不是最新的, 差不多一個多小時的時間差 B)
作者: barista    時間: 2005-11-25 18:17
標題: Re: [求助] unix shell command求助
前面有幾位提到的都可用啊。
ls -alt 為什麼不行!你只要稍微處理一下就好了。
像我在這種時候愛用 Perl:

  ls -alt *.* | perl -e '$_=&lt;STDIN&gt;;print /(\S+)$/'

就可抓出第一個檔名了(相信有很多其他方法,也一定有更簡單的)。

ls 也可以去掉 -a -l,也可不用 Regex:

  ls -t | perl -e '$_=&lt;STDIN&gt;;print split'

如果這是你的工作內容的話,建議你還是學一下 Script Language
跟 Regular Expression。不管是 Shell Script 或是 Perl Script,
解決問題的方式百百種,你也不一定要侷限於 One-Line Program。


Originally posted by bibibo at 2005-11-25 05:20 PM:
謝謝各位前輩的幫忙 :I
我是用csh去寫這個功能
幾過幾次測試..不能使用ls -lt , 因為我只要抓出最新檔案的檔案名稱B)
另外還試過
find ./ -mtime -365 -exec stat -f "%Sm %N" -t "%Y%m%d%H%M%S" {}  \; | sort | tail -n 1
我把L改寫成:
find ./ -print -mtime -365 -exec stat -f "%Sm %N" -t "%Y%m%d%H%M%S" {}  \; | sort | tail -n 1
可是出來的檔案不是最新的, 差不多一個多小時的時間差 B)

[ Last edited by barista on 2005-11-25 at 18:41 ]
作者: PipperL    時間: 2005-11-26 02:48
標題: Re: [求助] unix shell command求助
Originally posted by bibibo at 2005-11-25 17:20:
謝謝各位前輩的幫忙
我是用csh去寫這個功能
幾過幾次測試..不能使用ls -lt , 因為我只要抓出最新檔案的檔案名稱B)
另外還試過
find ./ -mtime -365 -exec stat -f "%Sm %N" -t "%Y%m%d%H%M%S" {}  \; | sort | tail -n 1
我把L改寫成:
find ./ -print -mtime -365 -exec stat -f "%Sm %N" -t "%Y%m%d%H%M%S" {}  \; | sort | tail -n 1
可是出來的檔案不是最新的, 差不多一個多小時的時間差 B)


我是有點好奇你為什麼要加一個" -print" 進去,如果照你上面說的「只要抓出檔案名稱」,那後面再串個 awk 就好了:

find ./ -print -mtime -365 -exec stat -f "%Sm %N" -t "%Y%m%d%H%M%S" {}  \; | sort | tail -n 1 |awk '{print $2}'

出來的檔案理論上是最新的,find 掃得到沒理由時間會錯。

此外,我覺得 barista 說得很有道理,如果這是工作的一部份,還是要自己學過。一行程式只是為了 copy & paste 方便,效率不一定比較高,能做的事也有限。要處理固定事務的話,我還是習慣使用 perl/sh。

ls -t | head -n 1 也很好用哦
作者: barista    時間: 2005-11-26 16:41
標題: Re: [求助] unix shell command求助
Originally posted by PipperL at 2005-11-26 02:48 AM:
ls -t | head -n 1 也很好用哦


這樣子的話:

  ls -t | head -1

也行

這種小工具倒是不一定每次都會想到要用,也不一定知道要用。
久了生疏了也容易忘記。
如果是我還是會先考慮用 Perl。
(不過 find sort head tail awk cut wc ls grep 等等這些工具都很基本,像我現在少用忘了無可厚非,你可能得仔細研究一下)
(系統裡有很多 Shell Script 的例子可供你參考,有些工具沒見過還不知道可以這樣使用)

[ Last edited by barista on 2005-11-26 at 16:52 ]
作者: bibibo    時間: 2005-11-28 17:26
標題: Re: [求助] unix shell command求助
謝謝各位前輩的指教
ls -t | perl -e '$_=<STDIN>;print split'
ls -t | head -n 1
兩個都可以run.. 已經搞定了
真不好意思..
因為做server的人離職了
臨危受命
時間上太趕了
我對server的東西又不熟 B)
所以只好上來求教 B)
謝謝大家
作者: yuyudiabo    時間: 2005-11-29 09:16
標題: Re: [求助] unix shell command求助
unix 就有這個好處, 條條大路通羅馬, 只不過有些東西要自己加工處理一下, 我是比較愛用簡單的指令, 最多再寫成shell就好了, 命名規則清楚一點, 應該就沒問題了




歡迎光臨 PALMisLIFE 討論區 (http://f.pil.tw/) Powered by Discuz! X2.5