+ -
当前位置:首页 → 问答吧 → 如何将含某字段的文件批量移除?

如何将含某字段的文件批量移除?

时间:2011-06-30

来源:互联网

假设文件夹a下有多个log文件,
1.log
2.log
3.log
……
现要求,如果某个log文件中存在Normal termination字段,则将该log文件mv到另一个文件夹b,
要求批量处理,求帮忙。

作者: njuytwc   发布时间: 2011-06-30

  1. ls *.log | xargs grep -l "Normal termination" | awk '{system("mv "$0" ../b")}'
复制代码

作者: zooyo   发布时间: 2011-06-30

  1. awk '/Normal termination/{system("mv "FILENAME" ../b")}' *.log
复制代码

作者: TasteOracle   发布时间: 2011-06-30

  1. mv -i $(grep -Frl --include=\*.log "Normal termination" .) ../b
复制代码

作者: zooyo   发布时间: 2011-06-30

多谢大家帮忙!

作者: njuytwc   发布时间: 2011-06-30

本帖最后由 rdcwayx 于 2011-06-30 12:45 编辑
  1. cd a

  2. find . -type f -name "*.log" -exec grep -l "Normal termination" {}\; |xargs -i mv {} ../b
复制代码

作者: rdcwayx   发布时间: 2011-06-30

3楼和4楼同一个bug, 如果一个文件有多行Normal termination, 就会重复复制。

作者: rdcwayx   发布时间: 2011-06-30

回复 rdcwayx


  是呢,此外如果log文件有成千上万了,ls *.log  , mv *.log会出错,貌似使用find没问题,你的这个是最佳的啦

作者: njuytwc   发布时间: 2011-06-30

for i in a/*.log;do
          [  `grep 'Normal termination' $i | wc -l` -ne 0 ] && mv $i b -f
done

作者: cjaizss   发布时间: 2011-06-30

回复 rdcwayx


    4楼的不会。

作者: zooyo   发布时间: 2011-06-30