lsが存在しないファイルを表示するのはなぜですか?

lsが存在しないファイルを表示するのはなぜですか?

名前が大文字で始まるすべてのファイルを一覧表示したいと思います。

[root@localhost /]# ls /usr/bin/[[:upper:]]*
/usr/bin/AtoB            /usr/bin/GenIssuerAltNameExt   /usr/bin/PKCS12Export
/usr/bin/AuditVerify     /usr/bin/GenSubjectAltNameExt  /usr/bin/POST
/usr/bin/BtoA            /usr/bin/GET                   /usr/bin/PrettyPrintCert
/usr/bin/CMCEnroll       /usr/bin/HEAD                  /usr/bin/PrettyPrintCrl
/usr/bin/CMCRequest      /usr/bin/HtFileType            /usr/bin/RSA_SecurID_getpasswd
/usr/bin/CMCResponse     /usr/bin/HttpClient            /usr/bin/RunSimTest
/usr/bin/CMCRevoke       /usr/bin/IBMgtSim              /usr/bin/TokenInfo
/usr/bin/CRMFPopClient   /usr/bin/Mail                  /usr/bin/X
/usr/bin/ExtJoiner       /usr/bin/OCSPClient            /usr/bin/Xorg
/usr/bin/GenExtKeyUsage  /usr/bin/PKCS10Client

うまくいきますが、現在のフォルダを適用すると奇妙に見えます。

[root@localhost /]# ls ./[[:upper:]]*
snk321cq
[root@localhost /]# ls -lt snk321cq
ls: cannot access snk321cq: No such file or directory
[root@localhost /]# ls -lt ./snk321cq
ls: cannot access ./snk321cq: No such file or directory

なぜ表示されるべきですかsnk321cq?そのようなファイルは実際には存在しません。

ベストアンサー1

ファイルはパターンと一致するディレクトリにあります。以下を使用してください。

ls -d ./[[:upper:]]*

デフォルトでは、ディレクトリ名が引数として渡されると、その名前のls代わりにその内容が表示されます。この-dオプションはこの機能を無効にします。

このモードを使用すると、シェルは拡張ディレクトリ名を受け取る[[:upper:]]*ために大文字で始まるすべてのファイル名を拡張します。ls

おすすめ記事