1

1行しか含まれていないファイルをすべて削除したい。各ファイルの行数をリストするには、wc -l *txt. rm特定の名前のファイルを削除する方法しか知りませんが、コンテンツの行は知りません。

誰でも助けることができますか?どうもありがとう!

4

3 に答える 3

2

結合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
于 2013-03-04T15:40:26.047 に答える
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 に答える
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 に答える