在我的目录中,我有一个.yaml' two.yaml',' cron.yaml'也许还有很多其他的yaml文件。我喜欢ls(或其他cmd,如果不可能)选择所有.yaml但cron.yaml
我试过了ls *.yaml -I cron.yaml
,但它也返回了cron.yaml ...
答案 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