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文件。

 

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