ディレクトリとサブディレクトリ内のすべてのゼロバイトファイルを検索します


82

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

私はこれをしました:

#!/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

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


1
あなたは読みたいかもしれませんman find
2013年

1
質問はunix&linuxにも投稿されています-同じ質問を複数の場所に投稿しないでください。
glenn jackman 2013年

私はスーパーに掲載が、私はここに再び尋ねたので、今の問題は歴史のクッキーをクリアしてcatcheで、すなわちで固定stackoverflowのとでは、次回のイムは、私のブラウザで問題が原因のようrepeateない
CIVA

回答:


174

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

find "$dir" -size 0

のすべての実装がfindデフォルトで出力を生成するわけではないため、次のことを行う必要がある場合があることに注意してください。

find "$dir" -size 0 -print

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

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

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に書き込むだけの場合、同じことを実行しますが、保存は避けます。


* .xml以外のディレクトリをフィルタリングできますか
Civa

2
便利な-emptyオプションもあります。
ウェズリーボー2017

@WesleyBaughに-emptyオプションを指定すると、ファイルがゼロのディレクトリも取得されます
Igor Scabini 2017

1
@IgorScabiniファイルに制限したい場合は、で行うことができます-type f
ウェズリーボー2017

美しい!シンプルで要領を得た。男、私はこのfindコマンドを十分に使用していません。私は本当にそれを理解することへの恐怖を乗り越えなければなりません。とても便利です。
racl101 2017

32

上記の回答に加えて:

それらのファイルを削除したい場合

find $dir -size 0 -type f -delete

1
サイズ0のすべてのファイルを常に削除する必要はありません。
Raghvendra 2017年

次に、サイズ0のフォルダー内のファイルを削除する方法
Raghvendra 2017年

-exec /bin/rm {} \;または、非標準の拡張機能をサポートしない-exec /bin/rm {} +非GNUfind実装でも機能します-delete
Gert van den Berg


3

Bash 4+テスト済み-これはサイズ0を検索する正しい方法です:

find /path/to/dir -size 0 -type f -name "*.xml"

サイズ0の複数のファイル拡張子を検索します。

find /path/to/dir -size 0 -type f \( -iname \*.css -o -iname \*.js \)

注:\(... \)を削除すると、結果はこの要件を満たすすべてのファイルになるため、サイズ0は無視されます。


-inameいくつかの非GNUの実装に移植することはできませんfindを参照してください標準のリストについては、ここでオプション
ゲルトファンデンベルグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.