ディレクトリを除くファイル数の印刷 [重複]

ディレクトリを除くファイル数の印刷 [重複]

私| 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オプションを使用すると、ファイル名の改行が?

おすすめ記事