選択したディレクトリ内の *.pdf ファイルの数を印刷するコマンド

選択したディレクトリ内の *.pdf ファイルの数を印刷するコマンド

現在、Linux マシンを使用していません。次のコマンドで希望する結果が得られますか?

ls | grep ".pdf" | wc

答え1

いいえ、「.pdf」は一致しすぎています。例:foo.pdfaおよびbpdf

さらに、誤って一致するファイルがない場合でも、wcオプションなしでは入力の行数、単語数、バイト数が出力されるため、必要な数値より 2 つ多い数値が返されます。 をgrep混ぜたい場合は を実行できますls | grep -E "\.pdf$" | wc -lが、そのディレクトリに pdf ファイルが多数ある場合を除き、grep は必要ないので、 で済みますls *.pdf | wc -l

後でじっくり考えてみた結果、次のようになりました:

また、grepカウントも実行できるので、grepが混在している場合は、-c出力を にパイプするのではなく、 grep にオプションを追加するだけです。wc -lつまり、ls | grep -cE "\.pdf$"という名前のディレクトリをカウントしないようにしたい場合は、 または を使用します。<something.pdf>ls -l | grep -cE "^-.*\.pdf$"

答え2

使用すべき

ls | grep ".pdf" | wc -l

パラメータ-lは結果の行数のみをカウントしますが、パラメータがない場合には-l、改行、単語、バイト数などの他の数も取得します。これは、「.pdf」文字列を含むファイル名 (およびフォルダ) もカウントすることに注意してください。

で終わるファイルのみをカウントするには.pdf、 を使用する方がよいでしょうfind:

find . -type f -name "*.pdf" | wc -l

答え3

シェルはフィルタリングを実行できるはずです:

ls *.pdf | wc -l

または、ファイル名の末尾が一致していることを確認する必要があります。

ls | grep "*\.pdf$" | wc -l

(ドル記号に注意してください)。

注: これらは両方とも一致しますディレクトリ存在する場合、「.pdf」で終わるファイル。

注 2:出力をパイプするとすぐに、lsオプションを指定した場合と同じように動作するはずです。それ以外の場合は、このスイッチを追加します。-1

関連情報