ループを使ってやりたいです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=C
POSIX 準拠の環境に配置すると、ls
このようなことは起こらず、かなり大きなツリーの深さの数を使用すると、最終的にはパフォーマンスにのみ役立ちます。