Bash递归通配符**的妙用
shopt -s globstar 的作用
启用 globstar 选项后,Bash 允许使用 ** 进行递归通配符匹配。该模式会匹配当前目录及其所有子目录中的文件,类似于 find 命令的功能,但语法更简洁。
启用 globstar
在 Bash 脚本或交互式 shell 中启用该功能:
shopt -s globstar
禁用该功能:
shopt -u globstar
递归匹配示例
匹配当前目录及其子目录中所有 .txt 文件:
ls **/*.txt
查找特定深度的文件(例如两级子目录):
ls **/**/*.txt
与 find 命令的对比
** 的优势在于语法简洁,但 find 提供更复杂的条件过滤(如按文件大小、时间等)。以下两种方式效果类似:
# 使用 globstar
echo **/*.txt
# 使用 find
find . -name "*.txt"
注意事项
** 不会匹配隐藏文件(以 . 开头的文件),除非显式指定:
shopt -s dotglob
echo **/.*
在大型目录结构中,** 可能导致性能问题,因 Bash 需要展开所有匹配路径。
实际应用案例
批量重命名子目录中的文件:
for file in **/*.bak; do
mv "$file" "${file%.bak}.backup"
done
统计所有 .py 文件的行数:
wc -l **/*.py
兼容性说明
globstar 是 Bash 4.0+ 的特性。检查 Bash 版本:
echo $BASH_VERSION
早期版本可通过 find 或外部工具(如 zsh 的递归通配符)实现类似功能。
BbS.okacop092.info/PoSt/1120_093542.HtM
BbS.okacop093.info/PoSt/1120_504848.HtM
BbS.okacop094.info/PoSt/1120_728014.HtM
BbS.okacop095.info/PoSt/1120_300220.HtM
BbS.okacop096.info/PoSt/1120_283222.HtM
BbS.okacop097.info/PoSt/1120_352380.HtM
BbS.okacop098.info/PoSt/1120_420094.HtM
BbS.okacop099.info/PoSt/1120_313437.HtM
BbS.okacop114.info/PoSt/1120_154194.HtM
BbS.okacop829.info/PoSt/1120_988335.HtM
BbS.okacop092.info/PoSt/1120_422702.HtM
BbS.okacop093.info/PoSt/1120_427719.HtM
BbS.okacop094.info/PoSt/1120_688317.HtM
BbS.okacop095.info/PoSt/1120_252308.HtM
BbS.okacop096.info/PoSt/1120_306921.HtM
BbS.okacop097.info/PoSt/1120_500565.HtM
BbS.okacop098.info/PoSt/1120_574793.HtM
BbS.okacop099.info/PoSt/1120_861706.HtM
BbS.okacop114.info/PoSt/1120_761445.HtM
BbS.okacop829.info/PoSt/1120_386983.HtM
BbS.okacop092.info/PoSt/1120_529537.HtM
BbS.okacop093.info/PoSt/1120_595485.HtM
BbS.okacop094.info/PoSt/1120_432574.HtM
BbS.okacop095.info/PoSt/1120_856204.HtM
BbS.okacop096.info/PoSt/1120_846945.HtM
BbS.okacop097.info/PoSt/1120_502642.HtM
BbS.okacop098.info/PoSt/1120_791106.HtM
BbS.okacop099.info/PoSt/1120_718620.HtM
BbS.okacop114.info/PoSt/1120_800222.HtM
BbS.okacop829.info/PoSt/1120_857540.HtM
BbS.okacop092.info/PoSt/1120_417882.HtM
BbS.okacop093.info/PoSt/1120_330321.HtM
BbS.okacop094.info/PoSt/1120_814197.HtM
BbS.okacop095.info/PoSt/1120_471095.HtM
BbS.okacop096.info/PoSt/1120_116938.HtM
BbS.okacop097.info/PoSt/1120_172549.HtM
BbS.okacop098.info/PoSt/1120_942650.HtM
BbS.okacop099.info/PoSt/1120_748133.HtM
BbS.okacop114.info/PoSt/1120_953433.HtM
BbS.okacop829.info/PoSt/1120_818852.HtM
BbS.okacop092.info/PoSt/1120_620249.HtM
BbS.okacop093.info/PoSt/1120_975385.HtM
BbS.okacop094.info/PoSt/1120_201117.HtM
BbS.okacop095.info/PoSt/1120_964882.HtM
BbS.okacop096.info/PoSt/1120_785214.HtM
BbS.okacop097.info/PoSt/1120_982556.HtM
BbS.okacop098.info/PoSt/1120_120760.HtM
BbS.okacop099.info/PoSt/1120_681494.HtM
BbS.okacop114.info/PoSt/1120_069257.HtM
BbS.okacop829.info/PoSt/1120_191405.HtM
BbS.okacop000.info/PoSt/1120_454602.HtM
BbS.okacop001.info/PoSt/1120_307315.HtM
BbS.okacop002.info/PoSt/1120_308547.HtM
BbS.okacop003.info/PoSt/1120_580223.HtM
BbS.okacop004.info/PoSt/1120_393722.HtM
BbS.okacop005.info/PoSt/1120_964202.HtM
BbS.okacop006.info/PoSt/1120_779122.HtM
BbS.okacop007.info/PoSt/1120_787019.HtM
BbS.okacop008.info/PoSt/1120_264361.HtM
BbS.okacop009.info/PoSt/1120_231532.HtM
BbS.okacop000.info/PoSt/1120_984087.HtM
BbS.okacop001.info/PoSt/1120_023792.HtM
BbS.okacop002.info/PoSt/1120_351189.HtM
BbS.okacop003.info/PoSt/1120_788283.HtM
BbS.okacop004.info/PoSt/1120_763558.HtM
BbS.okacop005.info/PoSt/1120_782793.HtM
BbS.okacop006.info/PoSt/1120_418269.HtM
BbS.okacop007.info/PoSt/1120_470119.HtM
BbS.okacop008.info/PoSt/1120_067264.HtM
BbS.okacop009.info/PoSt/1120_466161.HtM
BbS.okacop000.info/PoSt/1120_715316.HtM
BbS.okacop001.info/PoSt/1120_090400.HtM
BbS.okacop002.info/PoSt/1120_684284.HtM
BbS.okacop003.info/PoSt/1120_653061.HtM
BbS.okacop004.info/PoSt/1120_611029.HtM
BbS.okacop005.info/PoSt/1120_030103.HtM
BbS.okacop006.info/PoSt/1120_365025.HtM
BbS.okacop007.info/PoSt/1120_281566.HtM
BbS.okacop008.info/PoSt/1120_319766.HtM
BbS.okacop009.info/PoSt/1120_472739.HtM

查看10道真题和解析