Linux命令返回所有以TEMP开头但不以两位数结尾的文件

Linux命令返回所有以TEMP开头但不以两位数结尾的文件

返回所有以 TEMP 开头但不以两位数结尾的文件的 Linux 命令是什么?

我认为它应该看起来像这样:

ls -l TEMP*[!0-9][!0-9]

但我的搜索结果似乎遗漏了一些结果。

答案1

对于 GNU 和大多数现代 BSD find

find . -maxdepth 1 -type f -name 'TEMP*' ! -name "*[0-9][0-9]"

POSIXly:

find . ! -name . -prune  -type f -name 'TEMP*' ! -name "*[0-9][0-9]"

kshbash -O extglobzsh -o kshglob:

ls -ld TEMP*@([^0-9]?|?[^0-9]) [T]EMP TEMP?

答案2

如果您的 shell 是ksh, 或bash带有extglob选项(shopt -s extglob启用),那么

ls -d TEMP!(*[0-9][0-9])

应该管用。如果你想递归搜索并且启用了 globstar ( set -o globstarin ksh93, shopt -s globstarin 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 开头且不以两个数字结尾的所有内容。不幸的是,我认为你犯了一个语法错误。你应该更换!由 ^.所以现在您正在搜索以下文件:temp*99 和 temp*!!。

相关内容