101

ディレクトリとそのサブディレクトリ内のすべてのゼロバイト ファイルを見つけるにはどうすればよいですか?

私はこれをしました:

#!/bin/bash
lns=`vdir -R *.* $dir| awk '{print $8"\t"$5}'`
temp=""
for file in $lns; do
    if test $file = "0"; then
        printf $temp"\t"$file"\n"
    fi
    temp=$file
done

ただし、サブディレクトリではなく現在のディレクトリでのみ結果を取得し、ファイル名にスペースが含まれている場合は、最初の単語とそれに続くタブのみを取得します

4

4 に答える 4

203

サイズ 0 の $dir 以下のすべてのファイルの名前を出力するには:

find "$dir" -size 0

のすべての実装がfindデフォルトで出力を生成するわけではないことに注意してください。

find "$dir" -size 0 -print

質問の最後のループに関する 2 つのコメント:

文字列内の他のすべての単語を反復して代替値がゼロかどうかを確認するのではなく、行を反復することで、空白で発生している問題を部分的に解消できます。例えば:

printf '1 f1\n0 f 2\n10 f3\n' | while read size path; do
    test "$size" -eq 0 && echo "$path"; done

ls によって出力されるパスのいずれかに改行が含まれている場合、これは失敗することに注意してください。これにより、2 つのポイントが強化されます: 解析しないことls、およびパスに空白を許可しない適切な命名ポリシーがあること。

次に、ループからデータを出力するために、出力を変数に格納する必要はありませんecho。単純にループにその出力を stdout に書き込むようにさせると、同じことが達成されますが、保存は回避されます。

于 2013-03-29T12:58:35.623 に答える
9

いいえ、わざわざ grep する必要はありません。

find $dir -size 0 ! -name "*.xml"
于 2013-03-30T15:29:37.763 に答える