ルートから始めて、システム内のすべてのファイルを計算する方法は?

ルートから始めて、システム内のすべてのファイルを計算する方法は?

私のサーバー上のファイルの総数を知りたいです。これは可能ですか?

ベストアンサー1

具体的には、計算する内容に応じて、次のことを行う方が良いかもしれません。ファイルシステムごとルートディレクトリ内のすべてのファイルを計算する代わりに。ルートの下のすべての項目を計算すると、含めたくないファイルも計算されます/proc/sys

GNUを使用してルートファイルシステムのすべてを計算するには、find次のようにします。

find / -xdev -type f -printf '\n' | wc -l

-printf '\n'ファイル名ではなく、見つかったファイルごとに改行文字のみを印刷します。これにより、改行文字を含むファイル名自体が問題を引き起こさず、複数のファイルとして扱われます。

POSIX findを使用すると、次のことを簡単に実行できます。

find / -xdev -type f | wc -l

または、POSIXlyで改行文字を含むファイルが2回カウントされるのを防ぎます。

{ printf 0; find / -xdev -type f -exec sh -c 'printf "+ $#"' sh {} +; echo; } | bc

ここでは、各ファイルが異なるパラメータになり、パラメータの総数がsh印刷されます。複数のプロセスが呼び出される場合sh(ファイルが多い場合)、各sh出力はbc

修正する

よりシンプルだが遅いPOSIXソリューション:

find / -xdev -type f -exec printf '%s\0' {} + | tr '\n\0' '?\n' | wc -l

アップデート2

指摘したとおり@ギルス、通常のファイルのみを計算するには、-type fwithを使用します。findデバイスファイルも含めるには、を使用できます-type f -o -type b -o -type c。ディレクトリを計算するにはオプションを使用しないでください-type

Gillesのもう一つのポイントは、複数のハードリンクを持つファイルが別のファイルとして扱われることです。たとえば、最新のツリーの未変更ファイルを古いツリーのファイルにハードリンクして増分バックアップツリーが作成されるファイルシステムでは、これは理想的ではない可能性があります。 GNU ツールを使用してこの問題を克服するには、次のようにします。

find / -xdev -type f -printf '%i\n' | sort -u | wc -l

POSIXツールの使用:

find / -xdev -type f -exec ls -iq {} + | sort -buk 1,1 | wc -l

-qオプションはファイル名lsです?

おすすめ記事