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

需用For loop、wildcard和条件语句实现/etc目录特定文件查询

解决方案:遍历指定规则文件并输出属性

以下是满足需求的完整bash脚本,包含wildcard匹配、for循环和类型判断的if条件语句:

#!/bin/bash

# 遍历/etc目录中首字母为o/l、第二个字母为t/r的所有条目
for item in /etc/[ol][tr]*; do
    # 处理无匹配项的情况:当没有符合规则的文件时,wildcard会保留原字符串,直接跳过
    [[ -e "$item" ]] || continue

    # 提取文件名称(仅保留最后路径段)
    filename=$(basename "$item")
    # 获取文件大小(字节单位,如需人类可读格式可替换为`du -sh "$item" | cut -f1`)
    filesize=$(stat -c "%s" "$item")

    # 通过if条件判断文件类型
    if [[ -f "$item" ]]; then
        filetype="file"
    elif [[ -d "$item" ]]; then
        filetype="directory"
    elif [[ -L "$item" ]]; then
        filetype="link"
    else
        filetype="unknown"
    fi

    # 格式化输出结果,保证对齐美观
    printf "名称: %-20s 大小: %8d 字节 类型: %s\n" "$filename" "$filesize" "$filetype"
done

核心逻辑说明

  • Wildcard匹配规则:/etc/[ol][tr]* 精准筛选目标文件:
    • [ol] 限定首字母为o或l
    • [tr] 限定第二个字母为t或r
    • * 匹配后续任意长度的字符(包括空字符,即仅前两个字母符合的文件)
  • 无匹配项处理:当目录中没有符合规则的文件时,bash会将wildcard字符串本身作为遍历对象,通过[[ -e "$item" ]]检查条目是否存在,避免输出无效内容
  • 类型判断条件:
    • -f:判断是否为普通文件
    • -d:判断是否为目录
    • -L:判断是否为符号链接(注意:符号链接本身是特殊文件,-f不会识别它,必须用-L)
  • 大小获取:使用stat -c "%s"直接读取文件的字节大小,相比ls输出更稳定可靠,适合脚本处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:55:27