Bash中如何根据参数数组过滤ls -l输出匹配对应文件所属用户
解决方案
你可以通过将目标文件名存入Bash关联数组实现快速匹配,修改后的代码如下:
# 先将目标数组转换为关联数组,用于快速判断元素存在性 declare -A match_set for v in "${values[@]}"; do match_set["$v"]=1 done # 扩展原有解析逻辑,增加匹配判断 ls -l | while read a b c d e f g h j; do # 仅当文件名在匹配集合中时输出 [[ ${match_set["$j"]} ]] && echo "$c $j" done
如果你使用的Bash版本低于4.0不支持关联数组,可以用遍历数组的方式实现匹配:
ls -l | while read a b c d e f g h j; do for v in "${values[@]}"; do [[ "$j" == "$v" ]] && echo "$c $j" && break fi done
注意:如果你的文件名包含空格、换行、制表符等特殊字符,不建议直接解析
ls -l输出,可以改用stat或者find命令获取文件属性更稳妥。
内容的提问来源于stack exchange,提问作者CroatiaHR
相关产品推荐
相关产品推荐

