回答:
ファイルのみの再帰的なカウントが必要で、ディレクトリやその他のタイプは必要ない場合、次のようなものが機能するはずです。
find . -maxdepth 1 -mindepth 1 -type d | while read dir; do
printf "%-25.25s : " "$dir"
find "$dir" -type f | wc -l
done
find
... -print0 | xargs -0
....で処理することができます
bash
alias
!!
sort -rn -k 2,2 -t$':'
ラインでDESCリストを取得
この仕事は私をとても魅了し、自分で解決策を見つけたかったのです。それも、whileループを取らないとMAY実行速度に速くなります。言うまでもなく、トールの努力は私に物事を詳細に理解するのに大いに役立ちました。
これが私のものです:
find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "{} : $(find "{}" -type f | wc -l)" file\(s\)' \;
見た目よりもはるかに強力であるため、理由は控えめに見えます。:-)
ただし、これを.bash_aliases
ファイルに含める場合は、次のようにする必要があります。
alias somealias='find . -maxdepth 1 -mindepth 1 -type d -exec sh -c '\''echo "{} : $(find "{}" -type f | wc -l)" file\(s\)'\'' \;'
ネストされた単一引用符の扱いが非常に難しいことに注意してください。いいえ、引数に二重引用符を使用することはできませんsh -c
。
strace -fc script
ます。ご使用のバージョンでは、システム呼び出しが約70%増加しています。短いコード:-)のための1
find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "$(find "{}" -type f | wc -l)" {}' \; | sort -nr
find . -type f | cut -d"/" -f2 | uniq -c
現在のフォルダー内のフォルダーとファイルを、その下にあるファイルの数とともに一覧表示します。迅速で便利なIMO。(ファイルはカウント1で表示されます)。
| sort -rn
ファイルの数でサブディレクトリをソートするために追加することができます。
再帰的にカウントしたいが、特定のディレクトリの直下にあるファイルのカウントだけが必要な場合は、findを使用するのが確実です。
ls dir1 | wc -l
ls -d */ | xargs -n1 ls | wc -l
(ただし、既に機能している場合は、受け入れた答えを使用してください。これは、ただ今のところわかっていることです。)
find
重要な理由です。(おろか-print0
とxargs -0
、すでに他の回答でスコットによって指摘)
使用するもの...これにより、パラメーターとして指定したサブディレクトリー内のすべてのサブディレクトリーの配列が作成されます。すべてのサブディレクトリが処理されるまで、サブディレクトリとその同じサブディレクトリの数を出力します。
#!/bin/bash
directories=($(/bin/ls -l $1 | /bin/grep "^d" | /usr/bin/awk -F" " '{print $9}'))
for item in ${directories[*]}
do
if [ -d "$1$item" ]; then
echo "$1$item"
/bin/ls $1$item | /usr/bin/wc -l
fi
done
このpythonコードを使用できます。実行してインタープリターを起動し、python3
これを貼り付けます:
folder_path = '.'
import os, glob
for folder in sorted(glob.glob('{}/*'.format(folder_path))):
print('{:}: {:>8,}'.format(os.path.split(folder)[-1], len(glob.glob('{}/*'.format(folder)))))
または、ネストされたカウントの再帰バージョン:
import os, glob
def nested_count(folder_path, level=0):
for folder in sorted(glob.glob('{}/'.format(os.path.join(folder_path, '*')))):
print('{:}{:}: {:,}'.format(' '*level, os.path.split(os.path.split(folder)[-2])[-1], len(glob.glob(os.path.join(folder, '*')))))
nested_count(folder, level+1)
nested_count('.')
出力例:
>>> figures: 5
>>> misc: 1
>>> notebooks: 5
>>> archive: 65
>>> html: 12
>>> py: 12
>>> src: 14
>>> reports: 1
>>> content: 6
>>> src: 1
>>> html_download: 1