行数を数えるためのwcコマンドをご存知だと思います。同じwcコマンドをlsコマンドと一緒に使用して、ディレクトリ内のファイルの数を数えることができます。
このタスクは単純に見えますが、カウントファイルの必要性と定義に基づいて、すぐに少し複雑になる可能性があります。さらに混乱させる前に、Linuxでファイル数を数えるさまざまなユースケースについて見てみましょう。
Linuxのディレクトリ内のファイル数をカウント
最初に、このチュートリアルで使用するテストディレクトリの内容を示します。
[email protected]:~/tutorials$ ls -la
total 64
drwxr-xr-x 4 abhishek abhishek 4096 Apr 29 17:53 .
drwxr-xr-x 55 abhishek abhishek 4096 Apr 29 15:50 ..
-rwxr–r– 1 abhishek abhishek 456 Mar 6 16:21 agatha.txt
-rw-r–r– 1 abhishek abhishek 0 Apr 16 19:53 .a.t
-rwxr–r– 1 abhishek abhishek 140 Mar 22 16:41 bash_script.sh
-rw-rw-r– 1 abhishek abhishek 95 Feb 11 13:12 cpluplus.cpp
-rw-r–r– 1 abhishek abhishek 1778 Apr 29 16:16 my_zip_folder.zip
drwxr-xr-x 4 abhishek abhishek 4096 Apr 19 19:07 newdir
-rw-r–r– 1 abhishek abhishek 163 Apr 13 15:07 prog.py
-rw-r–r– 1 abhishek abhishek 19183 Mar 18 18:46 services
-rw-r–r– 1 abhishek abhishek 356 Dec 11 21:35 sherlock.txt
-rwxrw-r– 1 abhishek abhishek 72 Jan 21 15:44 sleep.sh
drwxr-xr-x 3 abhishek abhishek 4096 Jan 4 20:10 target
そのディレクトリに9つのファイル(1つの隠しファイルを含む)と2つのサブディレクトリがあることがわかります。ただし、手動で行う必要はありません。 Linuxコマンドを使用してファイルの数を数えましょう。
ファイルとディレクトリの数を数えます(隠しファイルなし)
lsコマンドとwcコマンドの組み合わせを実行するだけで、ファイルの数が表示されます。
ls | wc -l
これが出力です:
[email protected]:~/tutorials$ ls | wc -l
10
このコマンドに問題があります。現在のディレクトリ内のすべてのファイルとディレクトリをカウントします。ただし、非表示のファイル(名前がドットで始まるファイル)は表示されません。
これが、上記のコマンドで11個ではなく10個のファイル(9個のファイルと2個のディレクトリ)の数が表示された理由です。
lsコマンドの-aオプションが非表示のファイルを表示することはすでにご存知でしょう。ただし、ls -aコマンドを使用すると、も表示されます。 (現在のディレクトリ)および..(親ディレクトリ)。これが、を除く非表示のファイルを表示する-Aオプションを使用する必要がある理由です。および..ディレクトリ。
ls -A | wc -l
これにより、現在のディレクトリ内のファイルとディレクトリの正しい数がわかります。 11個(9個のファイルと2個のディレクトリ)の数を示す出力を見てください:
[email protected]:~/tutorials$ ls -A | wc -l
11
このコマンドを使用して、同じ結果を得ることができます:
ls -1A | wc -l
使用されるオプションはl(L)ではなく1(1)であることに注意してください。 l(L)オプションを使用すると、出力の先頭に追加の行が表示されます(記事の冒頭のディレクトリ出力の「合計64」を参照)。 1つを使用すると、追加の行を除いて、行ごとに1つのコンテンツが一覧表示されます。これにより、より正確な結果が得られます。
これまでに確認したのは、現在のディレクトリ内のファイルとディレクトリの数だけです。サブディレクトリ内のファイルは考慮されません。
すべてのサブディレクトリ内のファイルとディレクトリの数をカウントする場合は、treeコマンドを使用できます。
tree -a
このコマンドは、ディレクトリ構造を表示してから、出力の下部に要約を表示します。
[email protected]:~/tutorials$ tree -a
.
├── agatha.txt
├── .a.t
├── bash_script.sh
├── cpluplus.cpp
├── my_zip_folder.zip
├── newdir
│ ├── new_dir
│ │ ├── c.xyz
│ │ ├── myzip1.zip
│ │ └── myzip2.zip
│ └── test_dir
│ ├── c.xyz
│ ├── myzip1.zip
│ └── myzip2.zip
├── prog.py
├── services
├── sherlock.txt
├── sleep.sh
└── target
├── agatha.txt
├── file1.txt
└── past
├── file1.txt
├── file2.txt
└── source1
└── source2
└── file1.txt
7 directories, 19 files
出力からわかるように、合計で7つのディレクトリと20のファイルがあることがわかります。この結果の良い点は、ファイル数にディレクトリが含まれないことです。
これまでのところ、ファイルの数を数えるために私たちが見たすべてのソリューションは、ディレクトリも考慮に入れています。ディレクトリは本質的にファイルですが、ディレクトリではなくファイルの数だけをカウントしたい場合はどうでしょうか。すばらしい検索コマンドを使用できます。
次のコマンドを実行できます:
find . -type f | wc -l
上記のコマンドは、現在のディレクトリとそのサブディレクトリ内のすべてのファイル(タイプf)を検索しました。
[email protected]:~/tutorials$ find . -type f | wc -l
20
ディレクトリではなくファイルのみをカウントし、サブディレクトリではなく現在のディレクトリのみをカウントします
>カッコいい!しかし、サブディレクトリ内のファイルのみを除いて、現在のディレクトリ内のファイルの数をカウントしたい場合はどうでしょうか。上記と同じコマンドを使用できますが、わずかな違いがあります。
あなたがしなければならないのはあなたの発見の「深さ」を加えることです。 1に設定すると、サブディレクトリには入りません。
find . -maxdepth 1 -type f | wc -l
これが今の出力です:
[email protected]:~/tutorials$ find . -maxdepth 1 -type f | wc -l
9
最後に…
Linuxでは、同じ目標を達成するために複数の方法があります。 Linuxでファイルの数を数える方法は他にもいくつかあると確信しています。他のコマンドを使用する場合は、それを私たちと共有してみませんか?
このLinuxチュートリアルが、いくつかのことを学ぶのに役立つことを願っています。 Linuxに関するその他のヒントについては、連絡を取り合ってください。