我想删除所有只包含一行的文件。列出每个文件中的行数为wc -l *txt
。我只知道如何使用rm
删除具有特定名称但不包含内容行的文件。
有人可以帮忙吗?非常感谢!
答案 0 :(得分:2)
您可以将wc
和awk
合并到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
答案 1 :(得分:1)
这个怎么样?
for i in `ls -1 $dir`
do
if [ `wc -l $i` -eq 1 ]; then
rm $i
fi
done
答案 2 :(得分: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