Linuxのファイルとサブディレクトリの数を決定する

Linuxのファイルとサブディレクトリの数を決定する

ls -ldを使用してLinuxでディレクトリを表示すると、次の結果が表示されます。

user@shell:~/somedirectory$ ls -ld 
drwxr-xr-x 2014 K-rock users 65536 20011-11-05 11:34
user@shell:~/somedirectory$

somedirectory上記の結果を使用して、サブディレクトリとファイル数をどのように見つけることができますか?私が理解したところによると、リンクの数はサブディレクトリの数に対応しますが、ファイルの数はどうですか?ls -ldこの数字を見つけるために結果をどのように読むべきですか?

また、上記の結果を使用して、特定のディレクトリのファイルとサブディレクトリの数を知らせる必要があります。残念ながら、他のコードは実際には使用できません。

答え1

得られた出力でパスワードを復号しようとするので、作業を簡素化しようとします。

ls -ld
drwxr-xr-x 4 root root 4096 Nov 11 14:29 .

これで、ls -ld上記の出力がディレクトリに提供されます。今集中する必要があるのは数字4です。 4は以下に対応します。

  • 親ディレクトリにあるディレクトリエントリ。
  • ディレクトリ自体エントリ.
  • ..ディレクトリ内の2つのサブディレクトリにあるエントリ。

これを確認するために、次のコマンドを実行すると、lsより多くのディレクトリがあることがわかります。したがって、これはあなたのケースの結果から何を解釈できるかについてのアイデアを提供します。

drwxr-xr-x 2014 K-rock users 65536 20011-11-05 11:34

内部には2012のサブディレクトリがあるため、出力に2014が表示されます。

ファイル数は出力にありません。

私の理論が正しいかどうかをテストするために、次のテストを実行しました。

ls -la | grep -E '[d]' #Display only directories
drwxr-xr-x 12 root root 4096 Nov 11 14:42 .
drwxr-xr-x  4 root root 4096 Nov 11 14:20 ..
drwxr-xr-x  3 root root 4096 Nov 11 14:45 hello1
drwxr-xr-x  2 root root 4096 Nov 11 14:42 hello2
drwxr-xr-x  2 root root 4096 Nov 11 14:42 hello3
drwxr-xr-x  2 root root 4096 Nov 11 14:42 hello4
drwxr-xr-x  2 root root 4096 Nov 11 14:42 hello5
drwxr-xr-x  2 root root 4096 Nov 11 14:42 hello6
drwxr-xr-x  2 root root 4096 Nov 11 14:42 hello7
drwxr-xr-x  2 root root 4096 Nov 11 14:42 hello8
drwxr-xr-x  2 root root 4096 Nov 11 14:21 hello-subdir
drwxr-xr-x  2 root root 4096 Nov 11 14:29 spaced hello

これでls -ldコマンドを実行すると、次のような結果が得られます。

ls -ld
drwxr-xr-x 12 root root 4096 Nov 11 14:42 .

フォルダサブディレクトリ内のネストされたファイルまたはサブディレクトリは考慮されません。デフォルトでは、上記のコマンドは私のフォルダに10のディレクトリがあることを意味します。

PS:出力から何かを解析するのは一般的にls信頼できないので、悪い考えです。使用する機会がある場合は、find代わりにwithを使用してください。-maxdepth

答え2

を使用できる場合は、組み込み機能も使用できると想定してくださいlsbash

bash現在のディレクトリ内のすべてのエントリ数を計算するには、pureを使用します。

$ num_entries () (       # Define a function to:
> shopt -s nullglob      # expand * to empty string if no files
> shopt -s dotglob       # include .files in * expansion
> a=( * )                # create array containing all entries in current directory
> echo ${#a[@]}          # display length of array (number of directory entries)
> )
$ num_entries            # call function for current directory
467
$ 

bash現在のディレクトリのすべてのサブディレクトリを計算するには、pureを使用します。

$ num_dirs () (
> shopt -s nullglob
> shopt -s dotglob
> a=( */ )               # note the */ glob which selects only directories
> echo ${#a[@]}
> )

設定はその関数内でのみ適用され、他の副作用がないように( )関数の本文に入れました。shopt

答え3

単純なケースでは、次のように動作します。

ls -A1 | wc -l

答え4

いくつかの方法を組み合わせることができます

  1. ディレクトリ内のファイル数

    ls -l | grep "^-" | wc -l
    
  2. サブディレクトリのナビゲーション

    find ./subdirectory -type d
    
  3. 命令を出す

     find ./subdirectory -type d | xargs -I{} sh -c "ls -l {} | grep -c '^-'"
    

ディレクトリに保存されているファイルの数は繰り返し計算されます。

もちろん、印刷物を装飾または豊かにする方法はいくつかあります。

関連情報