需用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
相关产品推荐
相关产品推荐

