名前が大文字で始まるすべてのファイルを一覧表示したいと思います。
[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
答え2
内容を一覧表示せずにファイル/ディレクトリのみを一覧表示する必要がある場合は、次のことをお勧めします。
find /usr/bin/ -maxdepth 1 -name "[[:upper:]]*"
find
とにかく、ls
ファイル/ディレクトリを見つけるよりも優れています。
/usr/bin/Xvfb /usr/bin/Mail /usr/bin/GET /usr/bin/POST /usr/bin/HEAD /usr/bin/Test
これにより、検索結果のls出力を表示できます。
find /usr/bin/ -maxdepth 1 -name [[:upper:]]* -ls 272304 1956 -rwxr-xr-x 1 root root 1999608 Oct 18 07:48 /usr/bin/Xvfb 269561 0 lrwxrwxrwx 1 root root 15 Nov 4 2011 /usr/bin/Mail -> ../../bin/mailx 283683 16 -rwxr-xr-x 1 root root 14519 Aug 19 2010 /usr/bin/GET 283685 16 -rwxr-xr-x 1 root root 14519 Aug 19 2010 /usr/bin/POST 283684 16 -rwxr-xr-x 1 root root 14519 Aug 19 2010 /usr/bin/HEAD 21421 4 drwxr-xr-x 2 root root 4096 Jan 13 08:17 /usr/bin/Test