2014-11-04 73 views
0

我正在尋找grep最新的日誌文件(說abc-20141028-005356.log),這是修改後的解決方案。我可以用命令「ls -lt | head-1」來做到這一點,它給出瞭解決方案,但也有其他文件也在日誌文件夾中被修改..我試圖做一個頭-2,它給出了2個文件&然後grepped文件...說「ls -lt | head -2 | grep abc-」。採取最新的日誌文件和存儲在一個變量

真正的問題是,當我們有最新的數據相同的文件名&新的時間&日期。如何將最新的日誌文件存儲到具有相同重複文件名的變量&尾隨日期&時間。

PATH=`cd $1 ; ls -1t | head -1` 
LOGFILE=$1$PATH 

$ 1 = /選擇/ server1的/日誌/

請請告知同

我不能到grep O基時間戳唯一的文件,爲實例ABC -20141028-005356.log被修改&下一個文件是abc-20141028-005358.log,這是一個僅時間差異..但完整的文件名保持不變。

需要一個解決方案,在我可以修改分配給一個變量,不論文件名&時間戳(最新修改)的最新文件

I have couple of files here 

total 0 
-rw-r--r-- 1 root root 0 Nov 4 11:14 abc-20141028-005348.log 
-rw-r--r-- 1 root root 0 Nov 4 11:14 abc-20141028-005358.log 
-rw-r--r-- 1 root root 0 Nov 4 11:19 abc-20141029-005358.log 
-rw-r--r-- 1 root root 0 Nov 4 11:19 abc-20141029-005360.log 

This is the latest file i get if i use the below 

[[email protected] RKP]# ls -1t | head -1 
abc-20141029-005360.log 

The above can be done when there is only files starting with abcd-***. Now i have the below files 

-rw-r--r-- 1 root root 0 Nov 4 11:14 abc-20141028-005348.log 
-rw-r--r-- 1 root root 0 Nov 4 11:14 abc-20141028-005358.log 
-rw-r--r-- 1 root root 0 Nov 4 11:19 abc-20141029-005358.log 
-rw-r--r-- 1 root root 0 Nov 4 11:19 abc-20141029-005360.log 
-rw-r--r-- 1 root root 0 Nov 4 11:21 EFG-20141028-005348.log 
-rw-r--r-- 1 root root 0 Nov 4 11:21 EFG-20141028-005358.log 
-rw-r--r-- 1 root root 0 Nov 4 11:21 EFG-20141029-005358.log 

When i do the above command 

[[email protected] RKP]# ls -1t | head -1 
EFG-20141029-005358.log 

I want only files which are modified on abcd-XXXXX.XXXX based on the last modfied time. 

I'm sorry for making this so confused. Please let me know if you need anything more. 

The solution may be simple, but I'm not getting how to do this. !!!! 

感謝那些工作....

謝謝...那有效。雖然在腳本中運行上面我得到這個錯誤行30:[::整數表達式預計

任何想法我失蹤。下面是相同部分的腳本。

if [ -e $POSFile ]; then 
# Read last Position 
lastPosition=`cat $POSFile` 
fi 
fileLength=`stat -c %s $LOGFILE` 

if [ "$lastPosition" -gt "$fileLength" ]; then 
# Log file rolled 
lastPosition=0; 
fi 

difference=`expr $fileLength - $lastPosition` 
# New Spot To POSFile 

    enter code here 

echo $fileLength > $POSFile  
+1

你能解釋一下「真正的問題」嗎?我不明白你在那裏想表明什麼。你也可以直接在'ls'中直接使用''$ 1'',而不需要'cd'並且連接賦值中的變量。 – 2014-11-04 18:48:37

+0

我需要根據修改時間grep最新的日誌文件。該文件應該有最新的數據。日誌文件是相同的... abcd-YYMMDD-TIME.log – RKP 2014-11-04 18:51:36

+0

你的意思是文件的日期戳不足以找到正確的文件?你需要文件的實際修改時間?較舊的加蓋文件可能是您實際需要查看的最新文件? – 2014-11-04 18:52:18

回答

1

要獲取最新的文件中的某些目錄$1開始abc-

ls -t "$1"/abc-* | head -n1 

如果沒有文件,此模式匹配,你會得到一個錯誤No such file or directory。在這種情況下,請檢查$1的值。一些有用的命令:

echo $1 
ls "$1" 
ls "$1"/abc-* 

在帖子中的小腳本片段應該是:

LOGFILE=$(ls -t "$1"/abc-* | head -n1) 

我也注意到,你要設置PATH=的東西。這可能不會很好。 shell中的PATH變量是特殊的,它包含shell查找可執行文件的路徑列表。使用不同的名稱作爲變量,例如path=會很好(全部小寫)。

至於你的問題的第二部分:

線30:[::整數表達預期

這必須來自該行:

if [ "$lastPosition" -gt "$fileLength" ]; then 

-gt的雙方必須是整數這個工作。添加一些echo線檢查,如果這些變量是真正的數字,例如:

echo lastPosition=$lastPosition 
echo fileLength=$fileLength 
if [ "$lastPosition" -gt "$fileLength" ]; then 

而且,這將是更好所有`...`$(...)改寫。

+0

Thank you Janos&Etan .. that worked,I've updated the Question part with another querry。Please recommend for the相同 – RKP 2014-11-04 20:48:02

+0

@RKP最好每個帖子保留一個問題,但我也試圖解決這個問題,並更新了我的帖子。 – janos 2014-11-04 20:56:47

相關問題