10

多数のディレクトリにあるファイルの数を数える必要があります。シェル スクリプトでこれを行う簡単な方法はありますか (find、wc、sed、awk などを使用)。Python で適切なスクリプトを作成する必要がないようにするためです。

出力は次のようになります。

$ <magic_command>
dir1  2
dir2 12
dir3  5

ディレクトリ名の後の数字は、ファイルの数になります。プラスは、ドット/隠しファイルのカウントをオンまたはオフにすることができます。

ありがとう!

4

11 に答える 11

14

以下を試してください:

du -a | cut -d/ -f2 | sort | uniq -c | sort -nr

http://www.linuxquestions.org/questions/linux-newbie-8/how-to-find-the-total-number-of-files-in-a-folder-510009/#post3466477から

于 2012-12-07T06:19:40.870 に答える
6
find <dir> -type f | wc -l

find -type fは、指定されたディレクトリ内のすべてのファイルを各行に 1 つずつリストします。wc -lは、stdin から見た改行の量を数えます。

また、将来の参考のために:このような答えはグーグルです。

于 2012-12-07T06:17:00.190 に答える
4

多かれ少なかれ私が探していたもの:

find . -type d -exec sh -c 'echo "{}" `ls "{}" |wc -l`' \;
于 2012-12-07T06:31:47.670 に答える
3

このような1つの方法:

$ for dir in $(find . -type d  )
> do
>  echo $dir $(ls -A $dir | wc -l )
> done

隠しファイルを数えたくない場合は、-Aオプションを削除してください

于 2012-12-07T06:29:21.307 に答える
3

ls | wcディレクトリ内のファイルをリストしてみ て、ファイル出力のリストを入力として wc に渡します

于 2012-12-07T06:16:44.980 に答える
1
find . -type d | xargs ls -1 | perl -lne 'if(/^\./ || eof){print $a." ".$count;$a=$_;$count=-1}else{$count++}'

以下はテストです:

> find . -type d
.
./SunWS_cache
./wicked
./wicked/segvhandler
./test
./test/test2
./test/tempdir.
./signal_handlers
./signal_handlers/part2
> find . -type d | xargs ls -1 | perl -lne 'if(/^\./ || eof){print $a." ".$count;$a=$_;$count=-1}else{$count++}'

.: 79
./SunWS_cache: 4
./signal_handlers: 6
./signal_handlers/part2: 5
./test: 6
./test/tempdir.: 0
./test/test2: 0
./wicked: 4
./wicked/segvhandler: 9
于 2012-12-07T07:20:44.170 に答える
1

現在のディレクトリを変更せずに任意のディレクトリのフォルダーを一覧表示するMehdi Karamosly のソリューションの汎用バージョン

DIR=~/test/ sh -c 'cd $DIR; du -a | cut -d/ -f2 | sort | uniq -c | sort -nr'

説明:

  1. ディレクトリを変数に抽出する
  2. 新しいシェルを起動
  3. 現在のシェルのディレクトリが同じままになるように、そのシェルのディレクトリを変更します
  4. プロセス
于 2016-12-29T12:32:21.330 に答える
0

duベースの回答からの出力は気に入りましたが、大きなファイルシステムを見ていると時間がかかっていたので、同じ出力を提供する小さなlsベースのスクリプトをまとめましたが、はるかに高速です。

for dir in `ls -1A ~/test/`;
do
  echo "$dir `ls -R1Ap ~/test/$dir | grep -Ev "[/:]|^\s*$" | wc -l`"
done
于 2016-05-21T13:41:32.540 に答える
0

ls コマンドの出力をテキスト ファイルにコピーしてみて、そのファイルの行数を数えることができます。

ls $LOCATION > outText.txt; NUM_FILES=$(wc -w outText.txt); echo $NUM_FILES

于 2018-05-10T19:10:21.983 に答える
-1

find -type f -printf '%h\n' | sort | uniq -c | sort -n

于 2016-12-29T14:05:54.393 に答える