如何根据ubuntu中的内容删除多个文件

如何根据ubuntu中的内容删除多个文件

问题描述:

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

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

+0

是否要从文件中删除行或删除文件本身? – hek2mgl 2013-03-04 15:31:59

+0

@ hek2mgl我的意思是删除文件本身,谢谢! – manxing 2013-03-04 15:33:00

+0

从当前目录?还是递归? – hek2mgl 2013-03-04 15:33:39

任何回答这个问题不会有任何与此是在Ubuntu。您可以使用bash在Linux/* nix/bsd上执行此操作,包括cygwin(在Windows上)或Mac终端上。

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

这是怎么回事?

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

你可以结合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 
+0

+1。我很喜欢。 – fedorqui 2013-03-04 15:44:30