shell中清除編譯產生的*.log或*.txt文件方法

       使用腳本編譯文件時,會產生一些編譯的log或txt文件,在重新編譯時會導致無法進行第二次編譯,故在寫編譯腳本時,需要在編譯前進行編譯log文件的清除操作。

一般使用如下操作:

if [ -e *.log ]; then

rm  *.log

fi

此時如果文件不存在,則不報錯誤。但如果有多個.log文件存在,則報錯。這顯然不滿足要求的。在上述if[ -e *.log ]操作中,因爲-e 或者 -f 都只能接受一個參數,用了通配符後會有多個文件存在的可能就導致多個參數出現的可能,所以報錯。

採用以下操作就會解決產生多個*.log清除時報錯的問題。

files=$(ls *.log 2> /dev/null | wc -l)

if [ "$files" != "0" ] ;then

rm *.log

fi

對於以上的操作解釋:

ls *.log 查找所有的log文件;

2>  表示重定向操作錯誤提示信息(只有這兩個字符並不能刪除錯誤輸出);

  • 0 —— stdin(標準輸入)

  • 1 —— stdout (標準輸出)

  • 2 —— stderr (標準錯誤)

重定向操作符號有兩個>>>。儘管這兩個操作符都可以將重定向到文件,但是前者會先清空文件,再寫入內容;後者會將內容追加到現有文件的尾部。

/dev/null 是一個特殊的設備文件,這個文件接收到的任何數據都會被丟棄。因此,null這個設備通常也被成爲位桶(bit bucket)或黑洞。

(借用網絡圖)

wc  指令我們可以計算文件的Byte數、字數、或是列數,若不指定文件名稱、或是所給予的文件名爲"-",則wc指令會從標準輸入設備讀取數據。

參數:
  -c或--bytes或--chars 只顯示Bytes數。
  -l或--lines 只顯示行數。
  -w或--words 只顯示字數。
  --help 在線幫助。
  --version 顯示版本信息

命令:file=$(ls *.log 2> /dev/null | wc -l)

ls命令如果出現了錯誤提示,就會被重定向到/dev/null垃圾桶去了。所以,屏幕上不會打印任何輸出關於錯誤的提示字符。在這個命令的操作中,file 獲得文件stdout標準輸出,也就是文件述符1的屏幕輸出結果"*.log"。如果,這個123.txt文件不存在,file就肯定什麼都拿不到,因爲錯誤提示被/dev/null 吃了(劃掉),被重定向丟棄了屏幕也不顯示錯誤提示。所以,file 就是個什麼都沒有的空變量。

通過上述的操作,就可以刪除編譯產生的多個*.log文件。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章