【问题标题】:how to delete multiple files according to the content in ubuntu如何根据ubuntu中的内容删除多个文件
【发布时间】:2013-03-04 15:30:08
【问题描述】:

我想删除所有只包含一行的文件。要列出每个文件中的行数是wc -l *txt。我只知道如何使用rm 删除具有特定名称的文件,但不知道该行的内容。

有人可以帮忙吗?非常感谢!

【问题讨论】:

  • 您要从文件中删除该行还是删除文件本身?
  • @hek2mgl 我的意思是删除文件本身,谢谢!
  • 从当前目录?还是递归的?

标签: shell unix ubuntu


【解决方案1】:

您可以将wcawk 组合成一个单行器

 wc -l *.txt|awk '$1==1{print "rm "$2}' 

这将为您打印rm xxx.txt。如果你想执行它,只需将输出传送到sh

示例:

kent$  wc -l *.txt                           
 1 a.txt
 1 b.txt
 2 c.txt
 2 d.txt
 1 e.txt
 7 total

kent$  wc -l *.txt|awk '$1==1{print "rm "$2}'
rm a.txt
rm b.txt
rm e.txt

kent$  wc -l *.txt|awk '$1==1{print "rm "$2}'|sh

kent$  l
total 8.0K
-rw-r--r-- 1 kent kent 4 Mar  4 16:41 c.txt
-rw-r--r-- 1 kent kent 4 Mar  4 16:41 d.txt

【讨论】:

    【解决方案2】:

    这个问题的任何答案都与在 ubuntu 上没有任何关系。您可以在 Linux/*nix/bsd 上使用 bash 执行此操作,包括 cygwin(在 Windows 上)或 Mac 终端。

    for i in `ls`; do n1=$(wc $i | awk '{print $1}'); if [ $n1 -eq 1 ]; then rm $i; fi; done
    

    【讨论】:

      【解决方案3】:

      这个怎么样?

      for i in `ls -1 $dir`
      do
         if [ `wc -l $i` -eq 1 ]; then
              rm $i
         fi
      done
      

      【讨论】:

        猜你喜欢
        • 2021-09-08
        • 2014-05-07
        • 2017-12-01
        • 2021-07-17
        • 2019-07-09
        • 1970-01-01
        • 1970-01-01
        • 2021-06-15
        • 2010-10-17
        相关资源
        最近更新 更多