ディレクトリ内の o で終わるすべてのファイルを数える必要があると仮定します。(たとえば、ab12.14o、70010340.09o) どのコマンドを使用する必要がありますか?
試してみましたls *.o | wc
が、うまくいきませんでした。
答え1
おそらく、glob式から を削除する必要があります。これにより、 ではなく.
で終わるファイルのみが一致します。.o
o
ただし、より良い方法は以下を使用することです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