返回所有以 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]"
ksh
或bash -O extglob
或zsh -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 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 开头且不以两个数字结尾的所有内容。不幸的是,我认为你犯了一个语法错误。你应该更换!由 ^.所以现在您正在搜索以下文件:temp*99 和 temp*!!。