当前位置: 首页 > news >正文

shell 实现高效的单层文件路径匹配方法说明

shell 实现高效的单层文件路径匹配方法说明

正确方式:通过通配符进行路径扩展,实现文件名的匹配

例如:匹配 /home/ehigh/work 目录下一层的所有子目录

*/ 这个写法就是“只匹配目录”

#!/bin/bash
for dir_name in /home/ehigh/work/*/ ;doecho "$dir_name"
done

例如:匹配当前路径下所有以 .tar.gz 结尾的文件

这个写法只会匹配当前目录下一层的 .tar.gz 文件,不会递归子目录。

#!/bin/bashfor file_name in *.tar.gz ; doecho "$file_name"
done

错误方式:捕获 echo 或 ls 这种命令的输出,然后再对输出进行处理

例如:

#!/bin/bashfor dir_name in $(ls -d /home/ehieh/work/*/) ;doecho "$dir_name"
done

存在的问题

  • 依赖 ls 输出不可靠,文件名里有特殊字符时会出问题。
  • 未加引号的 $() 会触发 IFS 分词,但是如果给 $() 外面再加双引号,就只会变成一个参数