對於那些誰只是想要一個答案,那就是:
ls | sort -n -t _ -k 2 | tail -1
這裏的這引發了我的思考過程。
我打算假設[範圍]部分可以是任何東西。
從我們所知道的開始。
- 工作目錄:/傳入/外部/數據
- 的文件格式:[RANGE] _ [YYYYMMDD] .DAT
我們需要找到最近的[YYYYMMDD]文件該目錄,我們需要存儲該文件名。
可用的工具(我只列出了相關的工具,這個問題...識別他們的做法變得更容易):
我想我們不需要sed,因爲我們可以使用ls命令的整個輸出。使用ls命令時,awk,排序和尾部我們可以得到正確的文件像這樣(要記住,你必須要檢查你的OS將接受語法):
NEWESTFILE=`ls | awk -F_ '{print $1 $2}' | sort -n -k 2,2 | tail -1`
然後,它只是一個問題把下劃線放回去,這不應該太難。
編輯:我有一點時間,所以我開始修復命令,至少在Solaris中使用。
下面是令人費解的第一遍(假定目錄中的所有文件格式相同:[RANGE] _ [yyyymmdd] .dat)。我打賭有更好的方法來做到這一點,但是這可與我自己的測試數據(其實,我發現剛纔一個更好的辦法,見下文):
ls | awk -F_ '{print $1 " " $2}' | sort -n -k 2 | tail -1 | sed 's/ /_/'
...在寫這一點, ,我發現你可以這樣做:
ls | sort -n -t _ -k 2 | tail -1
我會把它分解成幾部分。
ls
夠簡單...獲取目錄列表,只是文件名。現在我可以將它轉化爲下一個命令。
awk -F_ '{print $1 " " $2}'
這是AWK命令。它允許您採用輸入行並以特定方式對其進行修改。在這裏,我所做的只是指定awk應該在有下劃線(_)的地方打破輸入。我使用-F選項執行此操作。這給了我每個文件名的兩半。然後我告訴awk輸出前半部分($ 1),後面跟着一個空格(「」) ,接着是下半部分($ 2)。請注意,該空間是我最初建議中缺少的部分。而且,這是不必要的,因爲您可以在下面的排序命令中指定分隔符。
現在輸出在每行上分割爲[RANGE] [yyyymmdd] .dat。現在我們可以對此進行分類:
sort -n -k 2
這需要輸入並根據第二個字段進行排序。 sort命令默認使用空格作爲分隔符。在編寫此更新時,我找到了用於排序的文檔,它允許您指定分隔符,所以AWK和SED是不必要的。取ls並通過以下排序管道:
sort -n -t _ -k 2
這可以達到相同的結果。現在,你只需要最後一個文件,所以:
tail -1
如果使用awk來分隔文件(這僅僅是增加額外的複雜性,所以不要做羞怯),你可以替換的空間一個下劃線再次與sed:
sed 's/ /_/'
這裏有一些很好的信息,但我相信大多數人不會像這樣讀到底部。
能[RANGE]是兩個字符的任意組合?這會產生很大的不同,因爲您可能會注意到已經給出的答案。 – 2010-08-16 17:38:13
是的,他們可以不同。同樣的文件夾將包含其他類型的文件,名稱不像上面所示。 – ziggy 2010-08-18 09:17:19