自分のホームディレクトリにあるファイルとディレクトリの総数を計算して表示するスクリプトをどのように作成しますか?

自分のホームディレクトリにあるファイルとディレクトリの総数を計算して表示するスクリプトをどのように作成しますか?

ループを使ってやりたいですfor。これは私が今まで考えたものですが、うまくいきません。

for home in /home/ {.,/}*; do echo "$home"; done

可能であれば、非再帰的にこれを行いたいと思います。

ベストアンサー1

forはfind現在のディレクトリのディレクトリタイプではないため、再帰は必要ありません。

find . ! -name . -prune ! -type d | grep -c /

...ディレクトリに対してのみ2番目の爆発を削除するか、-typeすべてのファイル形式のテストを完全に削除してください。

この場合、再帰がないと、ファイルごとに1つのパス区切り文字しか表示されないため、計算する項目と計算する場所に混乱がないため、簡単です。ファイル数を数える必要があるときに改行文字を数えると、問題が発生する可能性があります。 2つのことは互いに関連していません。では、何ができますか?

find .//. | grep -c '^\.//\.'

...子オブジェクトの正確な数と現在のディレクトリにルートを持つオブジェクトを返します。

また、動作しますが、反対のロジックを使用します。内部的に改行を引用し、stat()各設定ファイルの代わりに各ディレクトリだけが必要なので、おそらくより速いでしょう。

\ls -1qRA . | grep -Exc \[^/]+

-Rこのオプションを破棄すると、ls再帰なしで動作します。

ただし、上記は、ファイル名のマルチバイト文字と互換性のないロケールによって誤った数を返す可能性があります。LC_ALL=CPOSIX 準拠の環境に配置すると、lsこのようなことは起こらず、かなり大きなツリーの深さの数を使用すると、最終的にはパフォーマンスにのみ役立ちます。

おすすめ記事