从shell globbing中排除特定文件名

Als*_*nde 11 shell

我想fubar.log从shell(bash)globbing字符串中删除特定的文件名(例如)*.log.我尝试过的任何东西似乎都不起作用,因为globbing不使用标准RE集.

测试用例:目录包含

fubar.log
fubaz.log
barbaz.log
text.txt
Run Code Online (Sandbox Code Playgroud)

并且只能fubaz.log barbaz.log通过glob扩展.

gho*_*g74 18

如果你使用bash

#!/bin/bash
shopt -s extglob
ls !(fubar).log
Run Code Online (Sandbox Code Playgroud)

或没有 extglob

shopt -u extglob
for file in !(fubar).log
do
  echo "$file"
done
Run Code Online (Sandbox Code Playgroud)

要么

for file in *log
do
   case "$file" in
     fubar* ) continue;;
     * ) echo "do your stuff with $file";;
   esac 
done
Run Code Online (Sandbox Code Playgroud)

  • 被拒绝的编辑建议在没有extglob的情况下需要这样做:`shopt -u extglob`虽然我没有知识来判断它. (2认同)