You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash新手求助:列出文件夹时如何排除指定目录(如MASTER)

嘿,作为Bash新手碰到这种小挫折太正常啦!我来帮你搞定排除指定文件夹的需求~

方法1:用find命令(最推荐)

find是处理文件/文件夹查找的利器,语法清晰还不容易踩坑。要列出当前目录下所有直接子文件夹,排除名为MASTER的,直接用这条命令:

find . -type d ! -name "MASTER" -maxdepth 1

给你拆解下每个参数的作用:

  • .:从当前目录开始查找
  • -type d:只筛选文件夹(directory)
  • ! -name "MASTER":排除名字正好是MASTER的文件夹(注意!前后一定要加空格,不然会报错)
  • -maxdepth 1:只查当前目录的直接子文件夹,不深入嵌套的子目录(如果需要查找所有层级的文件夹,去掉这个参数就行)

要是你需要排除多个文件夹,比如MASTER和TEMP,只需要再加一个排除条件:

find . -type d ! -name "MASTER" ! -name "TEMP" -maxdepth 1
方法2:用for循环(适合理解基础逻辑)

如果你之前是用for循环写的脚本,大概率是过滤逻辑没写对。试试这个正确的写法:

for dir in */; do
    dir_name=${dir%/}  # 去掉文件夹名末尾的斜杠,得到纯名字
    if [ "$dir_name" != "MASTER" ]; then
        echo "$dir_name"
    fi
done

这里要注意两个关键点:

  • */会匹配当前目录下所有文件夹(默认末尾带斜杠),用${dir%/}可以去掉这个斜杠,得到干净的文件夹名称
  • 比较字符串时,变量一定要加双引号,不然如果文件夹名里有空格、特殊字符,脚本会直接报错
你可能踩过的坑

很多新手会尝试用ls -d */ | grep -v MASTER这种写法,但非常不推荐!因为如果文件夹名里包含空格、换行或者特殊字符,ls的输出会乱掉,后续处理很容易触发错误。所以尽量用上面两种更可靠的方式哦。

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:58:04