1

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

任何人都可以帮忙吗?非常感谢!

4

3 回答 3

2

你可以组合wcawk一个oneliner

 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
于 2013-03-04T15:40:26.047 回答
1

那这个呢?

for i in `ls -1 $dir`
do
   if [ `wc -l $i` -eq 1 ]; then
        rm $i
   fi
done
于 2013-03-04T15:37:04.527 回答
1

这个问题的任何答案都与在 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
于 2013-03-04T15:40:42.300 回答