ファイル名一致パターンの疑問符はどういう意味ですか?

ファイル名一致パターンの疑問符はどういう意味ですか?

このコマンドの疑問符はどういう意味ですか?

find . –type d –name "?d*" –print

それなしで実行してみましたが、何の変化も感じませんでした。

答え1

疑問符は、ファイル名の1文字と正確に一致します。だから、

find -name "c?t"

catandは一致しますcotが、coatorは一致しませんct

価値があるのは非常に一般的なファイル名の一致規則であり、さまざまなコマンドラインインターフェイスのコンテキスト、さらにはWindowsのcmd

一致するものがない場合、疑問符を削除すると違いが発生します。

答え2

"?d*"inのパターンはfind . -type d -name "?d*" -printシェルではなくfind(depquidが正しく指定したように)によって解釈され、最初のd文字は.

たとえば、ディレクトリと存在する場合、.dadfindコマンドは次を印刷しますadaxd

./.dad
./ada
./xd

そして、シェルコマンドecho ?d*(?d *パターンがシェルによって解釈される場合)は、少なくとも印刷されます(パターンに一致するすべてのファイルの名前があります)。

ada xd

一方、2番目の文字を含むディレクトリが存在しない場合、dfindは出力を生成しません。

?d*

答え3

疑問符はシェル内の単一文字として認識されます。この場合、名前は名前が 2 番目の文字 "d" で、その後に別の文字が続くディレクトリとして指定されます。

find-name 指定に一致するディレクトリ名がないため、何も出力されません。

答え4

find . -name '?*.*'"some(one) thing" 次の "anything" "dot" "anything" と一致します。

メモ:

  1. 「検索」検索モードです。いいえ正規表現ではなく bash glob 拡張です。
  2. 「何も」には「何も」を含めることができます。

したがって、上記はすべてのname.extensionおよび.name.extensionと一致しますが、名前のない「.extension」(または拡張子のない名前)は一致しません。

質問の「?d *」パターンは、「d」が続く単一の文字で始まるすべての名前と一致します。

関連情報