コマンドラインを使用して、システムに存在するすべてのファイル/フォルダーの数をカウントするにはどうすればよいですか?
/
フォルダー全体のプロパティウィンドウを開くだけで、GUIを使用して確認できますが、コマンドラインを使用して実行する方法を知っておくと便利です。
一連のコマンド全体が必要ですか、それとも1つだけですか?
ファイル/フォルダー名には改行を含めることができるため:
Sudo find / -type f -printf '.' | wc -c
Sudo find / -type d -printf '.' | wc -c
これは、現在の/
ディレクトリ内のany file/folderをカウントします。しかし、muruが指摘しているように、仮想/他のファイルシステムをカウントから除外したい場合があります(以下はany otherマウントされたファイルシステムを除外します):
find / -xdev -type f -printf '.' | wc -c
find / -xdev -type d -printf '.' | wc -c
Sudo find / -type f -printf '.'
:/
の各ファイルにドットを出力します。Sudo find / -type d -printf '.'
:/
の各フォルダーにドットを印刷します。wc -c
:文字数をカウントします。ファイル/フォルダー名の改行を処理しないと、他の方法(例: find / -type f | wc -l
およびfind / -type f -printf '.' | wc -c
を使用して実際に正しい方法:
% ls
% touch "file
\`dquote> with newline"
% find . -type f | wc -l
2
% find . -type f -printf '.' | wc -c
1
STDOUTが端末でない場合、find
は各ファイル/フォルダー名を文字通りに印刷します。これは、改行を含むファイル/フォルダー名が2つの異なる行にまたがって印刷され、wc -l
が単一のファイル/フォルダーに対して2行をカウントし、最終的に結果を1つずつ印刷することを意味します。
1つの方法は
Sudo find / -type f | wc -l
Sudo find / -type d | wc -l
(アクセスエラーを防ぐためのsudo)
ファイルの場合はf、ディレクトリの場合はd。
/ proc /ファイルシステムはエラーになりますが、これらのファイルは考慮しません;)
ファイルシステム内のオブジェクトのtotal数が本当に必要な場合は、df -i
を使用してiノードをカウントします。ディレクトリとプレーンファイルの内訳はわかりませんが、プラス側ではほぼ瞬時に実行されます。使用されるiノードの総数は、ファイルシステムがすでに追跡しているものです。
find
ベースの提案の1つを使用する場合は、/
で実行しないでください。 find -xdev
などによって生成されたマウントポイントのリストでfindmnt --list -v -U -t xfs,ext3,ext4,btrfs,vfat,ntfs -o TARGET
を使用します。ただし、バインドマウントは除外されないため、バインドマウント下のファイルは2回カウントされます。 findmnt
かなりクールです。
また、明示的なファイルシステムのタイプをリストすることなく、すべての「ディスク」マウントをリストする簡単な方法は確かにありますが、正確に何がわからないのですか。
別の回答で示唆されているように、find -printf . | wc -c
を使用して、ファイル名に含まれる変な文字のカウントに関する問題を回避します。 -not -type d
を使用して、ディレクトリ以外のファイルをカウントします。 (シンボリックリンクを除外したくないですか?)
Sudo find / -type f | wc -l
システム上の通常のファイルの数を教えてくれます。
Sudo find / -type d | wc -l
フォルダーの数。
zsh
を使用:
root
として、通常のファイルの場合:
files=( /**/*(.D) )
これは、.
で始まるものを含むすべての通常ファイルを配列files
に取り込みます。配列の要素の数を単純にカウントできます。
echo $#files
これにより、すべてのEdgeケースが処理されます。珍しいファイル名。
同様にディレクトリの場合:
dirs=( /**/*(/D) )
echo $#dirs
locatedb
を活用する別のアプローチ:
locate / | wc -l
利点:
find
ベースのアプローチよりもはるかに高速です(既に事前にインデックス付けされています)-xdev
:つまり、特殊ファイルをスキップします:/dev
、/proc
など。欠点:
/tmp
の下のファイルをスキップし、名前に改行を含むファイルを2回以上カウントする場合があります。df -i
アプローチよりも遅い