このワイルドカードはどのように機能しますか? "*.*"

このワイルドカードはどのように機能しますか? "*.*"

これが出力です。

echo  *.*
file1.txt file2.txt file3.txt

echo * .*
file1.txt file2.txt file3.txt . ..

2番目のコマンドにピリオドの前にスペース文字が含まれていない場合、これらのファイルが含まれるのはなぜですか?たくさん愛してくれてありがとう!

答え1

これらは2つの別々の領域です。最初の項目は*隠しファイルを除くすべての項目と一致するのでfile1.txtfile2.txtfile3.txt。 2番目は.*、名前が:で始まる隠しファイルとディレクトリにのみ一致するため、およびを.印刷します。...

スペースの後にピリオドがあるファイル/ディレクトリ名のみを印刷するには、スペースが区切り文字として扱われないようにスペースをエスケープする必要があります。

$ ls
 file1.txt  'file2 .txt'
$ echo *\ .*
file2 .txt

最後に、これが「すべてと一致する」という意味ではないことに言及したいと思います*.*。 Windowsシステムとは異なり、* nixシステムにはファイル名拡張子は必要ありません(まれな例外がありますが、拡張子は完全にオプションで任意です)。 * nixシステムでは、globは名前にaを含むファイル名*.*のみを印刷します。.

$ ls
 file   file1.txt  'file2 .txt'
$ echo *.*
file1.txt file2 .txt

すべてのファイルを印刷するには、単一を使用します*

$ echo *
file file1.txt file2 .txt

答え2

コマンドの引数は、引用符で囲まない限り、スペースで区切られます。

 echo *.*

「すべての文字」(*)、そのあとにドット(.)、および「すべての文字」()を含む*ファイル名と一致します。

 echo * .*

最初のパターンは、「すべての文字」(*)を含むファイル名と一致します。 2番目のパターン( " .*").はドット()で始まり、その後に「すべての文字」()が続く*ファイル名と一致します。これらの「ドットファイル」は一致しないため、*しばしば「隠し」ファイルと呼ばれます。

表示される2つのエントリ( " ."と " ..")は、現在のディレクトリと親ディレクトリへの必須リンクです。

NUL 0x00スペースやその他の「興味深い」文字(ファイル名にはスラッシュのみが禁止されています/)を含むファイル名を処理するのは複雑なので(読むman find xargs)、可能であれば避けるべきです。

ファイル名にスペースを引用するにはいくつかの方法があり、それぞれの方法で詳細が少しずつ異なります。

echo *\ .*
echo *" ."*

関連情報