ディレクトリとそのサブディレクトリにあるすべてのファイルの数を取得したいのですが、.zipファイルの数は計算したくありません。だから私は次のようになると思います:
find . -iname "*.zip" -type f 2> /dev/null | wc -l
以前のバージョンを除いて.zipファイルのみが返され、他のファイルのみを計算したいと思います。
答え1
LC_ALL=C find .//. ! -iname '*.zip' -type f 2> /dev/null |
LC_ALL=C grep -c //
統計名はで終わりません.zip
。
いくつかの注意:
find
式でテストを否定するには、!
式の前に追加するだけです。一部のfind
実装ではこれをサポートしています-not
が、これは標準でも移植性もありません。- ファイル名がユーザーロケールで有効なテキストを構成していない場合でも、で終わるファイル名を見つけるには、ローカライズ
find
(使用)を無効にしようとします。また、大文字はロケールによって異なります。場合によってはあり、場合によってはです。 C言語環境では。LC_ALL=C
.zip
i
I
İ
I
-name '*.[zZ][iI][pP]'
- ファイルパスは複数行で構成でき、
wc -l
それを使用して計算することは意味がありません。ここではfind .//.
、soを使用して//
各ファイルパス()で一意の項目を見つけてそれらを計算するために使用しますgrep -c
。 GNUツールを使用してを使用することもできますが、find ... -print0 | sed -z '$='
0個のファイルが見つかると出力は提供されません。find ... -print0 | tr -cd '\0' | wc -c
より良いでしょう(しかし、数字の周りにスペースがあるかもしれません)。また、見ることができますfind ... -print0 | gawk -v 'RS=\0' 'END{print NR}'
。またはGNUを使用してくださいfind
。find ... -printf . | wc -c