n-文字ファイル名をlsと一致させます。

n-文字ファイル名をlsと一致させます。

私はlsbashでこのコマンドを使用し、長さnのすべてのファイルまたはディレクトリを見つけようとしています。 n=5 と仮定

私のコマンドは次のとおりです。

ls ?????

ただし、これにはピリオドなどのアルファベット以外の文字も含まれます。たとえば、次のファイルが一致します。

ab.cd    
abd.c

5つの英数字名を持つファイルだけを一致させたいのです。

five1
five2    
five3

しかし、

abc.d    
ab.cd    
a.bcd

コマンドをどのように修正しますか?

答えを見つけてください:

ls [a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]

答えを見つけましたが、どうすればそれほど悪くすることができますか?

ベストアンサー1

これらのワイルドカードは解釈されませんls。これらのグローブはシェルによってファイル名のリストに展開され、引数として渡されますls。標準グロブにはいくつかの拡張(借用とアクティブ化)bashがありますが、他のシェルと比較してまだ制限があります。ksh88shopt -s extglobzshksh93

そしてzsh

setopt extendedglob
ls -d [[:alnum:]](#c5)

ksh93:

ls -d {5}([[:alnum:]])

または:

ls -d {5}(\w) # (\w includes underscore in addition to alnums)

または拡張正規表現を使用する場合:

ls -d ~(E)^[[:alnum:]]{5}$

bash同等のワイルドカードを持たない他のPOSIXシェルの場合は、次のことを行う必要があります。

ls -d [[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]]

[[:alnum:]]現在、ロケールのすべてのアルファベット文字(英語、ラテン文字だけでなく)、および0123456789(他の種類の数字も含めることができます)が含まれています。英語のアルファベット文字が必要な場合は、文字名を個別に指定してください。

c='[0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]'
unset -v IFS
ls -d $c$c$c$c$c

またはCロケールを使用してください。

(export LC_ALL=C
ls -d [[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]])

おすすめ記事