TEMPで始まるが2桁の数字で終わらないすべてのファイルを返すLinuxコマンドは何ですか?
私はこれが次のようになるべきだと思います。
ls -l TEMP*[!0-9][!0-9]
しかし、私の検索結果にいくつかの結果がありません。
答え1
GNUとほとんどの最新BSDの場合find
:
find . -maxdepth 1 -type f -name 'TEMP*' ! -name "*[0-9][0-9]"
POSIX的に:
find . ! -name . -prune -type f -name 'TEMP*' ! -name "*[0-9][0-9]"
ksh
またはbash -O extglob
またはzsh -o kshglob
:
ls -ld TEMP*@([^0-9]?|?[^0-9]) [T]EMP TEMP?
答え2
シェルがある場合ksh
、またはbash
オプションextglob
(shopt -s extglob
有効)がある場合
ls -d TEMP!(*[0-9][0-9])
動作する必要があります。再帰的に検索してglobstarを有効にするには(set -o globstar
in ksh93
、shopt -s globstar
in bash
)、次のことができる必要があります。
ls -d -- **/TEMP!(*[0-9][0-9])
(隠しディレクトリはデフォルトでは参照されません。)
例えば、
$ ls -d -- **/TEMP*
TEMP12345 TEMP123ab TEMPabc12 TEMPabcde tests/TEMP12345 tests/TEMP123ab tests/TEMPabc12 tests/TEMPabcde
それから
$ ls -d -- **/TEMP!(*[0-9][0-9])
TEMP123ab TEMPabcde tests/TEMP123ab tests/TEMPabcde
以下と同じzsh
:
setopt extendedglob
ls -d -- **/TEMP^*[0-9][0-9]
答え3
あなたの考えは大丈夫です。 temp で始まり、2 つの数字で終わらないすべてを見つけます。残念ながら、あなたは文法的なエラーを犯したようです。交換する必要があります! by ^.これでtemp*99とtemp*!ファイルを検索しています。