私| wc -l 'コマンドは現在のディレクトリにあるファイルの数を印刷しますが、これにはすべてのファイルとディレクトリが含まれることを学びました。ディレクトリ以外の通常のファイルだけで同じことができますか?
ベストアンサー1
目次多くのファイル形式の1つだけです。他のタイプは次のとおりです。シンボリックリンク、先入選出、装備、定期的な、ソケット...
出力では、ls -n
最初の文字は型を表します。d
ディレクトリの-
場合定期的な、l
のためのシンボリックリンク、次のようにすることができます。
LC_ALL=C ls -Aqn | LC_ALL=C grep -c '^-' # regular files only
LC_ALL=C ls -Aqn | LC_ALL=C grep -vc '^d' # anything but directory
(-A
隠しファイルの数を数えたくない場合は、このオプションを削除してください。)
検診もできます。シンボリックリンク解決後、
LC_ALL=C ls -LAqn | LC_ALL=C grep -c '^-' # regular files or symlinks to regulars
LC_ALL=C ls -LAqn | LC_ALL=C grep -vc '^d' # anything but directory and symlinks to dirs.
zsh
シェルの場合は、globbingを使用してこれを行うこともできます。
(){print $#} *(NDoN.) # regular
(){print $#} *(NDoN^/) # non-directories
シンボリックリンクを確認した後(-
glob修飾子を追加):
(){print $#} *(NDoN-.) # regular
(){print $#} *(NDoN-^/) # non-directories
(D
隠しファイルを計算したくない場合は、修飾子を削除してください)。
oN
順序を気にしないので、最適化としてファイルリストのソートを無効にすることです。 GNU実装にはオプションがls
あります-U
。
とにかくls | wc -l
エラーは、ファイル名を区切るために使用された改行の数ls
(ファイルごとに1つ)を数えるだけでなく、ファイル名の改行も計算するために発生します(隠しファイルも無視します)。この-q
オプションを使用すると、ファイル名の改行が?
。