9

次の jpeg ファイルを含むフォルダーがあるとします。

adfjhu.jpg  Afgjo.jpg  
Bdfji.jpg   bkdfjhru.jpg
Cdfgj.jpg   cfgir.jpg
Ddfgjr.jpg  dfgjrr.jpg

大文字で始まるファイルを削除または一覧表示するにはどうすればよいですか?

findこれは、grepとの組み合わせで解決できますxargs

しかし、bash での通常のファイル グロビング/パターン マッチングで可能ですか?

以下のcmdは、(私が知る限り)LANGがに設定されてen_US おり、照合順序が原因で機能しません。

$ ls [A-Z]*.jpg
Afgjo.jpg  Bdfji.jpg  bkdfjhru.jpg  Cdfgj.jpg  cfgir.jpg  Ddfgjr.jpg  dfgjrr.jpg

こういう作品

$ ls +(A|B|C|D)*.jpg
Afgjo.jpg  Bdfji.jpg  Cdfgj.jpg  Ddfgjr.jpg

しかし、一般的な解決策として、すべての文字 AZ に対してこれを行いたくありません!

それで、これは可能ですか?

乾杯//フレドリック

4

3 に答える 3

5

文字クラスでブラケット式を使用します。

ls -l [[:upper:]]*

man 7 regex文字クラスのリストとその他の情報については、を参照してください。

そのページから:

ブラケット式内で、'[:' と ':]' で囲まれた文字クラスの名前は、そのクラスに属するすべての文字のリストを表します。標準の文字クラス名は次のとおりです。

alnum    digit    punct  
alpha    graph    space  
blank    lower    upper  
cntrl    print    xdigit  
于 2010-09-17T12:44:42.117 に答える
5

Cロケールを(または) ロケールに設定する必要がありPOSIXます。

$ LC_ALL=C ls [A-Z]*.jpg

また

$ LC_ALL=C ls [[:upper:]]*.jpg

詳細については、こちらをお読みください: http://www.opengroup.org/onlinepubs/007908799/xbd/locale.html

于 2010-09-17T12:32:59.540 に答える
2

使用grep:

ls | grep -e ^[A-Z]

forさらにループを使用したい場合:

for i in $(ls | grep -e ^[A-Z]); do echo $i ;done 
于 2010-09-17T12:07:27.857 に答える