web-dev-qa-db-ja.com

特定のディレクトリ内の空のファイルとフォルダをすべて検索する方法

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

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

17
user364819

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'

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

    -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 {} \;

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

25
steeldriver

~/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 - {}" \; 

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

10
EdiD