2017-08-03 49 views
0

我需要在目錄DIR中找到最新的文件 - filename_YYYYMMDD使用模式在目錄中查找文件名

的下面未正常工作位置的每個時移,因爲空間之間(在文件大小字段大多發生,因爲它的不同之每一次。)

請建議,如果有其他方式。

report =‘ls -ltr $DIR/filename_* 2>/dev/null | tail -1 | cut -d 「 「 -f9’ 
+0

'ls -lt |頭-n 1'? – archemiro

回答

0

您可以使用AWK剪切最後一個字段。像下面

report=`ls -ltr $DIR/filename_* 2>/dev/null | tail -1 | awk '{print $NF}'` 

切可能不會在這裏

0

如果我知道你想循環,雖然目錄中的每個文件和文件最大'YYYYMMDD'值和與該值相關聯的文件名的選項,你可以使用簡單的POSIX parameter expansion with substring removal來隔離'YYYYMMDD',並將其與初始化爲zero的值進行比較,更新latest變量以保留最大的'YYYYMMDD',因爲您將循環查看目錄中的所有文件。每次找到較大的文件'YYYYMMDD'時,都可以存儲文件的name

例如,你可以這樣做:

#!/bin/sh 
name= 
latest=0 
for i in *; do 
    test "${i##*_}" -gt "$latest" && { latest="${i##*_}"; name="$i"; } 
done 
printf "%s\n" "$name" 

example目錄

$ ls -1rt 
filename_20120615 
filename_20120612 
filename_20120115 
filename_20120112 
filename_20110615 
filename_20110612 
filename_20110115 
filename_20110112 
filename_20100615 
filename_20100612 
filename_20100115 
filename_20100112 

示例使用/輸出

$ name=; latest=0; \ 
> for i in *; do \ 
> test "${i##*_}" -gt "$latest" && { latest="${i##*_}"; name="$i"; }; \ 
> done; \ 
> printf "%s\n" "$name" 
filename_20120615 

當腳本選擇filename_20120615作爲目錄中所有文件的最大'YYYYMMDD'的文件。

由於您僅使用由shell本身提供的工具,因此不需要爲其調用的每個管道或實用程序生成子殼體。

給它一個測試,讓我知道如果這是你的意圖,讓我知道你的意圖是不同的,或者如果你有任何進一步的問題。

相關問題