我有一個模擬運行,並期望它繼續至少10個小時。我已經將控制檯導出爲使用.txt文件如何刪除正在連續寫入的文件的較舊內容?
(binary) > out.txt
這個out.txt變得太大了。我不需要這個文件中的很多內容。如何在不損害寫入過程的情況下刪除此文件的舊部分?將在仿真結束時編寫的內容對我很重要。
我有一個模擬運行,並期望它繼續至少10個小時。我已經將控制檯導出爲使用.txt文件如何刪除正在連續寫入的文件的較舊內容?
(binary) > out.txt
這個out.txt變得太大了。我不需要這個文件中的很多內容。如何在不損害寫入過程的情況下刪除此文件的舊部分?將在仿真結束時編寫的內容對我很重要。
由於Carl
在評論中提到,所以您無法在積極編寫的日誌文件中真正做到這一點。然而,如果初始數據是不是與你有關的,你可以做以下的(雖然提防,你將失去所有的數據)
> out.txt
對於未來,你可以使用一個名爲實用logrotate(8)
從我讀過[這個問題](http://stackoverflow.com/questions/980283/truncating-a-file-while-its-being-used-linux)它聽起來像這樣可以減少磁盤用法,但文件將以一堆0開始(在這種情況下,這可能不是問題)。 –
@Jaypal,你能解釋一下你的解決方案嗎?你的意思是, > logfile.txt 對於正在創建的logfile.txt(out.txt中我給出的問題中的例子)?這會做什麼?它不會打擾寫作過程嗎? – akhil28288
@ akhil28288在提示符下運行'> logfile.txt'命令會將您的日誌文件減少到零大小。當您運行無法重新啓動的應用程序以及日誌中的數據不重要時,這很有用。這將防止您的應用程序由於空間不足而崩潰。 –
你可以使用tail
只存儲文件的末尾:
# Say you want to save the last 100 lines
your_binary | tail -n 100 > out.txt
這假定輸出在某個時候結束。
只有當您重新啓動但是,模擬。 –
哦,我不能重新啓動模擬。模擬已經運行了近10個小時。我猜測,我不能在編輯器中打開文件,刪除行並保存它。我希望有其他的方式。該文件現在已變成10.7GB。 – akhil28288
看到你的評論 - 文件現在是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
我認爲兩者都有幫助。
讓我知道你是否還有其他想法!
你不能這樣做。也許有人會爲你製作一個漂亮的技巧。 –
相關:[截斷正在使用的文件](http://stackoverflow.com/questions/980283/truncating-a-file-while-its-being-used-linux) –