1. ホーム
  2. linux

[解決済み] ディレクトリとサブディレクトリにあるすべてのゼロバイトファイルを検索する。

2022-12-30 10:06:41

質問

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

私はこれを行いました。

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

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

どのように解決するのですか?

サイズ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 が出力するパスのどれかに改行が含まれている場合、この処理は失敗することに注意してください。 ls を解析しないこと、そしてパスに空白を許さない正気なネーミング ポリシーを持つことです。

次に、ループからデータを出力するために、出力を変数に格納する必要はなく、ちょうど echo とする必要があります。 ループの出力を単に標準出力に書き込ませれば、同じことが達成されますが、格納することは避けられます。