2013-05-28 25 views
3

我有一個模擬運行,並期望它繼續至少10個小時。我已經將控制檯導出爲使用.txt文件如何刪除正在連續寫入的文件的較舊內容?

(binary) > out.txt 

這個out.txt變得太大了。我不需要這個文件中的很多內容。如何在不損害寫入過程的情況下刪除此文件的舊部分?將在仿真結束時編寫的內容對我很重要。

+0

你不能這樣做。也許有人會爲你製作一個漂亮的技巧。 –

+0

相關:[截斷正在使用的文件](http://stackoverflow.com/questions/980283/truncating-a-file-while-its-being-used-linux) –

回答

2

由於Carl在評論中提到,所以您無法在積極編寫的日誌文件中真正做到這一點。然而,如果初始數據是不是與你有關的,你可以做以下的(雖然提防,你將失去所有的數據)

> out.txt 

對於未來,你可以使用一個名爲實用logrotate(8)

+0

從我讀過[這個問題](http://stackoverflow.com/questions/980283/truncating-a-file-while-its-being-used-linux)它聽起來像這樣可以減少磁盤用法,但文件將以一堆0開始(在這種情況下,這可能不是問題)。 –

+0

@Jaypal,你能解釋一下你的解決方案嗎?你的意思是, > logfile.txt 對於正在創建的logfile.txt(out.txt中我給出的問題中的例子)?這會做什麼?它不會打擾寫作過程嗎? – akhil28288

+1

@ akhil28288在提示符下運行'> logfile.txt'命令會將您的日誌文件減少到零大小。當您運行無法重新啓動的應用程序以及日誌中的數據不重要時,這很有用。這將防止您的應用程序由於空間不足而崩潰。 –

0

你可以使用tail只存儲文件的末尾:

# Say you want to save the last 100 lines 
your_binary | tail -n 100 > out.txt 

這假定輸出在某個時候結束。

+0

只有當您重新啓動但是,模擬。 –

+0

哦,我不能重新啓動模擬。模擬已經運行了近10個小時。我猜測,我不能在編輯器中打開文件,刪除行並保存它。我希望有其他的方式。該文件現在已變成10.7GB。 – akhil28288

0

看到你的評論 - 文件現在是10 GB ...嘗試使用sed -i縮小大小,以便它可以與其他工具一起工作,如果你想完全擦除它,則:> logfile。

工具可以應付與其緩衝區一樣大的文件,否則它們應該流式傳輸.....類似於分割的東西不會在4 GB文件上工作,不知道他們是否爲此調整了代碼,因爲我不得不與一個很大的文件一起工作。

兩個建議:

有我能想到去像採用分體式的一些方法....但幾乎都被從日誌(簡化版),涉及一個單獨的文件的創建並重命名或重定向到。

使用split將日誌分解爲較小的日誌(split -l 100 ...),並將程序輸出重定向到最近使用ls -1找到的最近日誌。 這似乎工作正常。

此外,我嘗試編輯/截斷頂10條線在同一文件中的第二方法......

Kaizen ~/shell_prac 
$ cat zcntr.sh 
## test truncate a log file 

##set -xv 
:> zcntr.log ; 

## fxn 
cntr_log() 
{ 
limit=$1 ; 
start=0 ; 

while [ $start -lt $limit ] 
do 
    echo "count is $start" >> zcntr.log ; ## generate a continuous log 
    start=$(($start + 1)); 
    sleep 1; 

    cnt=$(($start % 10)) ; 
    if [ $cnt -eq 0 ]   ## check to truncate the top 10 lines using sed 
    then 
    echo "truncate at $start " >> zcntr.log ; 
    sed -i "1,10d" zcntr.log ; 
    fi 

done ; 

}

## main cntrlr 
    echo "enter a limit" ; 
    read lmt ; 
    cntr_log $lmt ; 

這似乎工作 我測試了一個計數器打印到值25 輸出:

Kaizen ~/shell_prac 
$ cat zcntr.log 
count is 19 
truncate at 20 
count is 20 
count is 21 
count is 22 
count is 23 
count is 24 

我認爲兩者都有幫助。

讓我知道你是否還有其他想法!

相關問題