単語カウンター(wc)の使い方 )および/usr/binにあるファイルまたはディレクトリの数をカウントするための配管 ディレクトリ?
承認された回答:
1つのアプローチは、lsを利用することです。 ファイルのリストを提供しますが、このリストには1行に1つのファイルまたはディレクトリのみが表示されることが保証されます。 -1 スイッチがこれを行います。
$ ls -1
dir1
dir2
dir3
fileA
fileB
fileC
例
上記のサンプルデータを空のディレクトリに作成します。
$ mkdir dir{1..3}
$ touch file{A..C}
確認してください:
$ ls
dir1 dir2 dir3 fileA fileB fileC
カウントするには、wc -lを使用できます ls -1内のファイルまたはディレクトリに対応する行数をカウントします 出力。
$ ls -1 | wc -l
6
(ただし、非表示のファイルは含まれていないことに注意してください)
一緒にではなく、ファイルまたはディレクトリを数える
ファイルまたはディレクトリのいずれかをカウントするには、戦術を少し変更する必要があります。この場合、ls -lを使用します ディレクトリとファイルが表示されるためです。
例
$ ls -l
total 12
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir1
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir2
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir3
-rw-rw-r-- 1 saml saml 0 Nov 16 09:49 fileA
-rw-rw-r-- 1 saml saml 0 Nov 16 09:49 fileB
-rw-rw-r-- 1 saml saml 0 Nov 16 09:49 fileC
次に、grepを使用できます ディレクトリまたは非ディレクトリを除外するには:
# directories
$ ls -l | grep "^d"
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir1
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir2
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir3
# regular files
$ ls -l | grep "^-"
-rw-rw-r-- 1 saml saml 0 Nov 16 09:49 fileA
-rw-rw-r-- 1 saml saml 0 Nov 16 09:49 fileB
-rw-rw-r-- 1 saml saml 0 Nov 16 09:49 fileC
ここで、wc -lを使用します。 上記を数えるためにもう一度:
# directories
$ ls -l | grep "^d" | wc -l
3
# regular files
$ ls -l | grep "^-" | wc -l
3
ただし、wcは回避できます 全体として、grepを使用します の-c オプション:
$ ls -l | grep -c '^d'
(ここでも、非表示のファイルは含まれていません。ディレクトリと通常のファイルは2種類のファイルであることに注意してください。名前付きパイプ、シンボリックリンク、デバイス、ソケットなど、他にもたくさんあります。)
再帰
/usr/binの下でファイルとディレクトリを再帰的に検索する必要がある場合 次に、戦術を完全に変更して、findと呼ばれる別のツールを利用することをお勧めします。 。
例
$ find /usr/bin | wc -l
4632
(ただし、/usr/binの上 それ自体がカウントに含まれます)
上記で使用したのと同じ手法を使用して、lsを使用できます。 似たようなことをするがls 通常、出力を解析するのに適したツールではありません。 find 一方、このために構築されており、ファイルまたはディレクトリを検索するためのスイッチを提供しています。
# find files
$ find /usr/bin -type f
# find directories
$ find /usr/bin -type d
(今回は、findに注意してください 非表示のファイルが含まれています(. および.. ))。
改行?
改行文字がファイル名やディレクトリ名を作成するときに使用できる正当な文字である理由を私は理解していません。したがって、wcを使用して上記で説明した方法 およびls これらと競合しないので、それを念頭に置いて使用してください。
例
改行を使用してディレクトリとファイル名を作成します。
$ mkdir $'dir4n5'
$ touch $'fileDnE'
ls それらを正しく表示します:
$ ls -1
dir1
dir2
dir3
dir4?5
fileA
fileB
fileC
fileD?E
しかし、wc 改行を含むディレクトリとファイルを1つではなく2つのアイテムとしてカウントします。
$ ls -1 | wc -l
10
findのGNU実装を使用する場合、これを回避する1つの方法 findを利用することです 見つかった各ファイルの代わりに何か他のものを印刷し、代わりにそれらをカウントする機能。
例
$ find . -printf . | wc -c
9
ここでは、現在のディレクトリにあるすべてのものを検索しています(..を除く) )、ドットを印刷します(. )それぞれについて、wcを使用してドットを数えます 行の代わりにバイトをカウントする機能、wc -c 。
参考資料
- bash –検索結果をカウントするための最良の方法は何ですか?