列出特定扩展名的文件,除了使用ls的一个文件

时间:2018-06-04 14:36:34

标签: bash ls

在我的目录中,我有一个.yaml' two.yaml',' cron.yaml'也许还有很多其他的yaml文件。我喜欢ls(或其他cmd,如果不可能)选择所有.yaml但cron.yaml

我试过了ls *.yaml -I cron.yaml,但它也返回了cron.yaml ...

2 个答案:

答案 0 :(得分:2)

使用扩展的glob选项执行此操作。使用语法!()匹配括号内不存在的任何模式。

shopt -s extglob 
ls -- !(cron).yaml

如果这只是用于列表并且不打算在程序中使用,请在子shell中执行此操作以不使glob选项永久化

(
    shopt -s extglob
    ls -- !(cron).yaml) ;
)    

( shopt -s extglob; ls -- !(cron).yaml; )一行写成。

POSIX shell不支持您可以执行的扩展glob选项

set -- *.yaml
for arg; do
    if [ "$arg" != "script.sh" ]; then 
        printf '%s\n' "$arg"
    fi
done

答案 1 :(得分:0)

不幸的是,ls -Ipattern并不适用于在命令行中明确列出的文件,因为cron.yaml将在您使用*.yaml时使用。

快速实现目标只需使用grep -v

ls *.yaml | grep -v cron.yaml