10、11、12 で終わるすべてのファイルのリスト

10、11、12 で終わるすべてのファイルのリスト

10、11、12で終わるすべてのファイルを一覧表示しようとしましたが、何も機能しませんでしたls *[10-12]ls *[10,11,12]理由はわかりません。誰が私を助けることができますか?

答え1

[...]マッチ一つ特徴(要素の構成一部のシェルでは)指定されたコレクションに存在する場合。

[10-12]まで1の1つ以上の文字を表すので、または1と同じです。012[102][0-2]

[10,11,12]1、、、、…はと同じであることを意味し0ます。,1[,0-2]

希望する場所は次のとおりです。

ls -d -- *1[0-2]

つまり、(隠されていない)ファイル名は1で終わり、その後に01または2文字が続きます。

foo110これでorとも一致しますfoo112345612

これを望まない場合は、次のものが必要です。

ls -d -- *[!0-9]1[0-2] 1[0-2]

しかしこれは似合わないfoo010

で と を一致させるfoo10には、 または 次をfoo00010使用します。foo110foo10foo00010kshbash -O extglobzsh -o kshglob

ls -d -- !(*[0-9])*(0)1[0-2]

with を除いて、zshこれらのパターンの中に一致しないパターンがある場合はそのまま渡されるため、ls存在する場合はその名前のファイルが生成され、未使用のファイルが生成される可能性があります。リストする必要はありません。を使用すると、この問題を解決するためのオプションをbash設定できます。failglob

zsh数値範囲に一致するグローバル演算子を持つ唯一のシェルです。

ls -d -- *<10-12>

10 ~ 12 の数字で終わるファイルと一致します。後ろに来るfoo110ので一致することもできます。以下を使用して、次のことができます。foo110extendedglob

ls -d -- (^*[0-9])<10-12>

しかし。

zshまた、中かっこ拡張型を導入したシェルです{10..12}(数年後にksh93とbashによってコピーされます)。

しかし、{10,11,12}同等のようにいいえワイルドカード。これはワイルドカード以前に実行された拡張形式です。

ls -d -- *{10..12}

まず、次に展開してください。

ls -d -- *10 *11 *12

zsh3つのglobのうちの1つが失敗すると、コマンドは(および)で中断されますbash -O failglob


bash1しかし、一般的なUTF-8ロケールのGNUシステムを含むいくつかのシェルやロケールでは、٠ота०০੦૦୦௦౦౸೦൦෦๐໐༠༳၀႐០៰᠐᥆᧐ en_US.UTF-8᪀᪐᭐᮰᱀᱐⁰₀↉⓪⓿〇㍘[0-1]

答え2

この試み:

ls *{10,11,12}

または

ls -l *{10,11,12}

(隠しファイルは表示できません)

答え3

これは働きます:

ls -d -- *1[0-2]

これは[]文字セットを表すことに注意してください。数値の場合は[0-9]です。

答え4

ls *@(10|11|12)これがあなたが探しているものです。

extglobこの機能は以下を使用して有効にする必要があります。Shoputつまり、shopt -s extglob。また、この行を追加して~/.bashrc永久に有効にすることもできます。

仕組みの詳細については、以下を参照してください。パターンマッチの公式Bashマニュアルページ

関連情報