ディレクトリにどれだけのファイルやディレクトリがあるかをwc
計算するために単語カウンタ()とパイプを使用する方法は?/usr/bin
ベストアンサー1
ls
これを行う1つの方法はファイルリストを提供することを使用することですが、リストには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
ディレクトリが何であるか、aaファイルが何であるかを示すため、これを使用します。
はい
$ 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 $'dir4\n5'
$ touch $'fileD\nE'
ls
正しく表示してください。
$ ls -1
dir1
dir2
dir3
dir4?5
fileA
fileB
fileC
fileD?E
ただし、wc
改行文字を含むディレクトリとファイルは、1つの項目ではなく2つの項目としてカウントされます。
$ ls -1 | wc -l
10
GNU実装を使用している場合、この問題を解決する1つの方法find
は、関数を使用してfind
見つかったファイルごとに異なるものを印刷してから、そのファイルの数を数えることです。
はい
$ find . -printf . | wc -c
9
ここでは、現在のディレクトリ内のすべての項目(除外..
)を検索し、それぞれについて点()を印刷し、行の代わりにバイト数を計算する機能を.
使用して点数を計算します。wc
wc -c