私のサーバー上のファイルの総数を知りたいです。これは可能ですか?
ベストアンサー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 f
withを使用します。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
です?
。