私は次の2つの命令を出しました。
find / -name "*.txt" -or -type f -print |wc -l
出力:1270
find / -name "*.txt" -or -type d -print |wc -l
出力:1305
なぜですか? OR演算子を使用しているため、出力は同じでなければなりません。
しかし、最初の条件が真であれば、次の条件に進まないでしょうか?したがって、この場合、両方のコマンドの最初の条件が同じで真であるため、両方の結果は同じです。
答え1
いいえ。出力が同じであってはなりません。
-type f
(文書)とともに
-type d
(目次)
だからカウントが変わります。 OR演算子はこれを変更しません。
最初のコマンドはすべてのファイル(.txtファイルまたはすべてのファイル)を報告し、2番目のコマンドはすべてのテキストファイルとすべてのディレクトリを報告します。もちろん、この数字はさまざまです。
おそらくあなたが望むもの
$ find / -type f -name '*.txt' | wc -l
注:ファイル名に改行文字が含まれていると失敗します。
ファイル名に改行がある場合はお試しください...
$ find . -type f -name "*.txt" -printf '.' | wc -c
行ではなく、各ファイル名の最初の文字のみを印刷し、文字数を数えます。 (望むよりhttps://stackoverflow.com/a/15663760)
答え2
de OR演算子を使用するので、2番目の式の結果を1番目の式の結果に追加します。
- -type f: すべてのファイルと一致
- -type d: すべてのディレクトリと一致
式が同じではないため、結果が異なります。