.??*はシェルコマンドで何を意味しますか?

.??*はシェルコマンドで何を意味しますか?

これ次のようなtarすべてのファイルとフォルダに「ドット」を撮るコマンド:

tar -zcvf dotfiles.tar.gz .??*

私はおなじみ一般的な表現しかし、どのように説明するのかわかりません.??*。リストされたファイルを実行してみls .??*ました。この正規表現にexampleで始まるフォルダ内のすべてのファイルがtree .??*含まれるのはなぜですか?.

答え1

ワイルドカード正規表現ではありません。一般的に言えば、シェルはglobとして引用されていないコマンドラインに入力したすべての内容を解釈しようとします。シェルは正規表現をまったくサポートする必要はありません(ただし、より高度な最新のシェルは実際には構文の正規表現一致演算=~子などの正規表現をサポートしますがbash [[)。

これは.??*球です。これはリテラルポイントで始まり、.その後に2つの(必ずしも同じではありません)文字、??その後に等しい正規表現、[^/]*つまりゼロ文字以外の文字が続くファイル名と一致します/

シェルパス名拡張(「globbing」のフルネーム)の詳細については、以下を参照してください。POSIX仕様

答え2

ワイルドカード.??*いいえ正規表現は、外観に関係なく.ピリオド()で始まり、その後に2つの単一文字(??)と任意の数(0個以上)*の異なる文字()が続くファイル名に変換されます。

たぶんこのページではファイル名のワイルドカード文字役に立つでしょう。

答え3

別の答えに追加するには、Singleは単一?文字のファイル名に変換され、??2文字のみを含むファイル名と一致します。

[root@mercy testdir_2]# ls
ion  it  r
[root@mercy  testdir_2]# ls ?
r
[root@mercy  testdir_2]# ls ??
it
[root@mercy 1 testdir_2]# ls ???
ion
[root@mercy  testdir_2]#

関連情報