(* \:2)のアスタリスク、バックスラッシュ、コロン、2つの意味は何ですか?


14

次のlsコマンドの意味は何ですか?

ls -l *\:2,*T
  • ls =リスト
  • -l = long(リスト)
  • *TおそらくT最後に

しかし*\:2、それとコンマはどうですか?

回答:


25

*\:2,*Tリストするファイルのグロブパターンです。それを理解するには、いくつかのことを覚えておく必要があります。

  • : シェルでエスケープする必要があります \:
  • ファイル名にはカンマを簡単に含めることができます

だから、*\:2,*T例えばというファイルにマッチしますTranscationNumber:2,EventType:XYT

編集

コメントから、:ニーズをエスケープする必要性(またはそうでない)には、いくつかの言葉があります。サインをエスケープすることは厳密には必要ではありません:が、オートコンプリート時にbash自体が示唆しています。


3
オイゲンとHBruijnに感謝します。いくつかの複雑なグロビングパターンが疑われましたが、実際にはコロンとコンマに一致する必要があり、ファイルを操作するときには考えていませんでした。これで、このコマンドは完全に意味をなします。Maildirディレクトリ内のすべての電子メールファイルを一覧表示します。これらのファイルは「削除済み」(T)としてマークされています。ところで 番号2は、バージョン2のMaildirを意味します(wiki2.dovecot.org/MailboxFormat/Maildirを参照)。
jugmac00

11
いつ:からエスケープする必要があるのですか?
バーマー

7
:エスケープする必要はありません。特定の状況(コマンドとして使用する場合)でのみ特別であり、グロブパターンではありません。\:同等です:違いはありませんエスケープ、。
テルドン

1
@Aaron、それは正確に何もありません:シェルはまだ変数置換、特に割り当ての種類(つまり、デフォルト値を設定するため)を処理します:unset var; : ${var:=x}; echo $var
glenn jackman

3
@terdon&@Aaronコロン:は、COMP_WORDBREAKS環境変数のデフォルト値の一部です。Bashのオートコンプリートでは、これらの文字は読み取り行ライブラリによって単語の区切り文字として使用され、コロンを含むファイル名はもちろん単一の単語である必要があります。したがって、bashのオートコンプリートではコロンをエスケープする必要がありますが、それ以外の場合は「ほとんど」特殊文字ではありません
...-HBruijn

14

ワイルドカードパターンに一致するすべてのファイルを一覧表示する *:2,*T

ここで、ワイルドカード*はすべて(すべての可能な文字の任意の数)に一致
:2,し、ファイル/ディレクトリ名に存在する必要がある文字です。
コロン:はエスケープする必要がある特殊文字であるため、の形式です\:2,
ファイル/ディレクトリ名はT。で終わる必要があります。

一致するファイル名は

:2,T
a:2,T
a:2,bT
abbY-$fafaf:2,<hskjhsgdfhjk>T

1
::について特別なことはありません。エスケープする必要はありません。
ケビン

@Kevin bashの自動補完は、COMP_WORDBREAKデフォルトで設定される環境値のリストに含まれているため、ファイル/ディレクトリ名パターンのコロンを自動的にエスケープします。-したがって、実際の特殊文字ではありませんが、コマンドラインでオートコンプリートを使用し、ファイル名とコロンを一致させる場合は、エスケープする必要があります。
-HBruijn

9

他の人が指摘しているように、これは長い形式でリストされ、ファイルに:2T

これは、削除された(ゴミ箱に入れられた)ファイルをMaildirフォルダーで検索するように見えます。ただし、堅牢性のためには*、最後に別のものが必要でした。後でアルファベット順の位置に新しいフラグを追加できます。たとえば、Dovecotはファイルサイズが最後にある別のフィールドを追加します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.