.
私の目標は、ファイルシステム内のドット()で始まるすべてのファイルまたはディレクトリを見つけることです.gnupg
。それで私はこのような命令を思い出しました。
find -name '.*'
オンラインで確認してみると、オプションのパラメータ値[.]*
として置換を使用する必要があるというヒントがありました。-name
結果は同じに見えますが、2つの方法の違いは何ですか?
答え1
まったく違いはありません。しようとした場合:
$ diff <(find -name '.*') <(find -name '[.]*')
どんな結果も得られません。これはコマンド出力が同じであることを意味します。私はあなたがこの「ヒント」を文脈から逸脱したと思います。意図は異なる場合があります。
find
マニュアルページから:
-nameパターン
ファイル名(先行ディレクトリが削除された先行ディレクトリへのパス)のデフォルトは、シェルパターンパターンと一致します。*',
デフォルト名の先頭のメタ文字( ? 'と.'(findutils-4.2.2の変更))[]') match a
パラメータが文字クラスとして解釈されることを意味します[]
。その中に何もないという点-name
を除いて、 を使用していないかのように.
リテラルと一致します。.
[]
答え2
globモードの場合、違いはありません。.*
リテラルピリオドで、その後にゼロ個以上の文字が続きます。[.]*
括弧内の文字(この場合はリテラルピリオドでなければなりません)の後に0個以上の文字が続きます。
似ている一般的な表現 .*
そして[.]*
それは違います。 1つ目は単一文字が0個以上発生し、2番目はリテラルピリオドが0個以上発生します。正規表現のメタ文字ですが、.
角かっこで囲まれず、文字通り処理されます。
答え3
どうですか?
'\.[a-z]*'
式には、リテラルポイントの後に任意の数のアルファベット文字が続く必要があります。クイックテストでは効果があるようです。ドットを離れるにはバックスラッシュが必要です。通常、「すべての文字」(やや)を意味するメタ文字です。
私の表情は
find ~/ -name '\.[a-z]*'
編集:数字で始まるドットファイルを含めるには、これを試してください'\.[a-z0-9]*'
。なぜそう言えないのかよく分からないが、'\.(.*)'
誰か提案があると確信しています。