空に見えるだけでなく空になっているファイルを含む、特定のディレクトリ内のすべての空のファイルとフォルダを見つける方法


18

私のフォルダ~/listには、それぞれ独自のサブフォルダやサブサブフォルダなどを含む大量のフォルダがあり、ほぼ各レベルに多くのファイルがあるとしましょう。ただし、これらのファイルとフォルダーの一部は空です。空のファイルとフォルダーを見つけるためにそれらをすべて再帰的に検索するにはどうすればよいですか?そして、それらがファイルの場所のリストに表示されるので、それぞれがどこにあるかがわかります(すべてのファイルがファイル拡張子を持っているわけではないので、ファイルとフォルダがどちらであるかを明確にする必要もあります)。Ubuntu GNOME 15.10とGNOME 3.18を実行しています。

また、ファイルが空に見えたが空ではなかったかどうかも教えてくれると非常に便利であることに注意してください(たとえば、スペースや改行が入っている場合など)。また、実際の空のファイルと出力で空に見えるファイルを区別します。


1
空のファイル、文字のないファイルですか?(スペース、改行、タブなど)
ジェイコブVlijm

@JacobVlijm:さて、以前は0バイトのファイルだけを考えていましたが、あなたがそれについて言及した今、誰かがスペースや改行などのファイルを私に与えるのに十分夢中だったかもしれないので、私もそれらを検出したいです、しかし、実際の空のファイルと空に見えるファイルを区別するために、出力が欲しいです。

回答:


25

から man find

    -empty File is empty and is either a regular file or a directory.

したがって、空のファイルとディレクトリの両方を見つけるには、それで十分です

find ~/lists -empty

タイプを示すには、%y出力形式指定子を使用できます

          %y     File's type (like in ls -l), U=unknown type (shouldn't happen)

例えば

find ~/lists -empty -printf '%y %p\n'

またはls--classifyオプションを含む外部プログラムを使用します

    -F, --classify
          append indicator (one of */=>@|) to entries

すなわち

find ~/lists -empty -exec ls -Fd {} \;

「空」の定義が空白文字のみを含むファイルを含むように拡張されると、少なくとも空でないファイルを実際に開いてその内容を調べる必要があるため、より複雑になり、計算量が増えます。私が頭の外から考えることができる最も効率的な方法は、次のようなものです

find ~/list \( -empty -o \( -type f -a ! -exec grep -qm1 '[^[:blank:]]' {} \; \) \) -exec ls -Fd {} \;

(空、またはファイルAND grepは、少なくとも1つの非空白文字を検出しません)。おそらくより良い方法があります。


申し訳ありませんが、何か見落としていました。質問の編集バージョンをご覧ください。追加するのが多すぎてはいけません。

11

~/listフォルダーから:

find . -empty -type d

空のディレクトリをリストするため

find . -empty -type f

空のファイルをリストします。

find . -type f -exec bash -c 'if [ `cat "{}" |wc -w` -eq 0 ]; then echo "file - {}";fi' \; -or -empty -exec bash -c "echo dir - {}" \; 

空白や空行を含む空のフォルダーとファイルを一覧表示するための


そして、これはサブフォルダーとその内容も再帰的にリストしますか?

これにより、空のファイルとフォルダーが再帰的に表示されます
-EdiD

申し訳ありませんが、何か見落としていました。質問の編集バージョンをご覧ください。追加するのが多すぎてはいけません。

[ `grep -c [[:alnum:]] "{}"` -eq 0 ][A-Za-z0-9]セットにない文字のみを含むファイルを通過させます。
コス

@kos-おそらくグラフが代わりにalnumが仕事をします
-EdiD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.