ディレクトリ内の特定のファイルをカウントする

ディレクトリ内の特定のファイルをカウントする

ディレクトリ内の o で終わるすべてのファイルを数える必要があると仮定します。(たとえば、ab12.14o、70010340.09o) どのコマンドを使用する必要がありますか?

試してみましたls *.o | wcが、うまくいきませんでした。

答え1

おそらく、glob式から を削除する必要があります。これにより、 ではなく.で終わるファイルのみが一致します。.oo

ただし、より良い方法は以下を使用することですfind

find . -maxdepth 1 -name '*o' -printf 'x' | wc -c

-type fプレーン ファイル (ディレクトリを除く) に制限するには を追加し、-maxdepth 1再帰的にカウントする場合は を削除できます。

答え2

使用しないでくださいls

シェル配列を使用して、次の文字で終わるファイルの名前を保存しますo

files=( *o )

次に以下を実行します:

echo "${#files[@]}"

ファイルの数を取得します。

@steeldriver は正当な指摘をしています。一致するファイル名がない場合、glob パターンは文字通りに解釈されます。このため、一致するファイル名がない場合でも、ファイル数は 1 になります。

この問題を解決するには、nullglobまたはfailglobシェル オプションを設定します。

shopt -s nullglob
shopt -s failglob

関連情報