首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列出文件夹,但如果文件夹与Bash中列出的文件夹匹配,则排除该文件夹

列出文件夹,但如果文件夹与Bash中列出的文件夹匹配,则排除该文件夹
EN

Stack Overflow用户
提问于 2018-02-06 06:20:53
回答 2查看 35关注 0票数 0

我是第一次玩Bash。

这个脚本将列出所有文件夹,但我想修改它,如果可能的话,不列出某个文件夹。

工作中:

代码语言:javascript
运行
复制
_list_banners () {
  for f in * ; do [ -d "$f" ] && echo ${_handle_banner_type}${_handle_message} $f ; done
}

这可以正常工作并列出文件夹,但我想从列表中排除文件夹MASTER

已尝试:

代码语言:javascript
运行
复制
_list_banners () {
  for f in * ;
    if [ $f != "MASTER" ]; then
      do [ -d "$f" ] && echo ${_handle_banner_type}${_handle_message} $f
    fi
  ; done
}

但是当我运行它时,我得到了以下错误,而不是我的文件列表:

代码语言:javascript
运行
复制
$ bash myscript
myscript: line 3: syntax error near unexpected token `if'
myscript: line 3: `    if [ $f != "MASTER" ]; then'
EN

Stack Overflow用户

回答已采纳

发布于 2018-02-06 06:29:04

您可以将目录检查和排除都移动到您的glob中(需要shopt -s extglob,而shopt -s nullglob将是一个好主意,以避免在没有匹配的情况下出现意外行为):

代码语言:javascript
运行
复制
shopt -s extglob
shopt -s nullglob

_list_banners () {
    for f in !(MASTER)/; do 
        echo "${_handle_banner_type}${_handle_message} $f"
    done
}

!(MASTER)是一个不包括MASTER的glob,追加/仅返回目录。

如果只想要目录名而不带尾部斜杠,那么可以在echo行中使用${f%/},而不只是$f

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48632436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档