Bash递归通配符:globstar详解
什么是 shopt -s globstar
shopt -s globstar 是 Bash shell 中的一个选项,用于启用递归通配符模式匹配。通过启用 globstar,可以使用 ** 通配符来递归匹配目录中的所有文件和子目录。这一功能在处理复杂的文件结构时非常有用,能够简化脚本编写和命令行操作。
启用 globstar 选项
在 Bash 中,shopt 命令用于管理 shell 选项。要启用 globstar,可以运行以下命令:
shopt -s globstar
启用后,** 将能够递归匹配目录中的内容。如果需要禁用该选项,可以使用:
shopt -u globstar
递归匹配文件的基本用法
启用 globstar 后,** 可以匹配零个或多个目录层级。例如:
ls **/*.txt
这条命令会递归列出当前目录及其子目录中的所有 .txt 文件。** 会匹配任意深度的子目录,而 *.txt 则匹配文件名。
与 * 通配符的区别
普通的 * 通配符只能匹配当前目录中的文件和目录,不会递归进入子目录。例如:
ls *.txt
这条命令仅列出当前目录中的 .txt 文件,不会递归搜索子目录。
递归匹配目录
** 不仅可以用于匹配文件,还可以用于匹配目录。例如:
ls **/dir/
这条命令会递归查找所有名为 dir 的目录。注意末尾的 / 确保只匹配目录而非文件。
结合其他通配符使用
** 可以与其他通配符结合使用,实现更复杂的匹配模式。例如:
ls **/*[0-9].log
这条命令会递归查找所有以数字结尾的 .log 文件。
递归删除或复制文件
globstar 在处理批量操作时特别有用。例如,递归删除所有 .tmp 文件:
rm **/*.tmp
递归复制所有 .jpg 文件到目标目录:
cp **/*.jpg /target/dir/
注意事项
** 的递归匹配可能会因为目录结构过于复杂或文件数量过多而导致性能问题。在实际使用中,建议先通过 echo 或 ls 测试匹配结果,再执行删除或修改操作。
与其他工具的结合
globstar 可以与 find 命令结合使用,但 ** 的语法更简洁。例如:
find . -name "*.txt"
与以下命令等效:
ls **/*.txt
但 ** 的语法更直观且易于记忆。
实际应用示例
以下是一个实际脚本示例,用于递归查找并处理所有 .csv 文件:
#!/bin/bash
shopt -s globstar
for file in **/*.csv; do
echo "Processing $file"
# 处理文件的逻辑
done
兼容性说明
globstar 是 Bash 4.0 及以上版本的功能。如果使用的是旧版本 Bash,可能需要升级。可以通过以下命令检查 Bash 版本:
bash --version
总结
shopt -s globstar 是一个强大的工具,能够简化递归文件操作。通过启用 globstar,可以轻松地使用 ** 通配符递归匹配文件和目录,提高脚本编写和命令行操作的效率。
BbS.okapop163.sbs/PoSt/1122_733014.HtM
BbS.okapop165.sbs/PoSt/1122_680264.HtM
BbS.okapop166.sbs/PoSt/1122_397550.HtM
BbS.okapop167.sbs/PoSt/1122_223776.HtM
BbS.okapop168.sbs/PoSt/1122_750335.HtM
BbS.okapop169.sbs/PoSt/1122_684122.HtM
BbS.okapop170.sbs/PoSt/1122_315298.HtM
BbS.okapop171.sbs/PoSt/1122_346210.HtM
BbS.okapop172.sbs/PoSt/1122_996875.HtM
BbS.okapop173.sbs/PoSt/1122_041839.HtM
BbS.okapop163.sbs/PoSt/1122_546859.HtM
BbS.okapop165.sbs/PoSt/1122_706869.HtM
BbS.okapop166.sbs/PoSt/1122_238683.HtM
BbS.okapop167.sbs/PoSt/1122_778905.HtM
BbS.okapop168.sbs/PoSt/1122_535711.HtM
BbS.okapop169.sbs/PoSt/1122_313477.HtM
BbS.okapop170.sbs/PoSt/1122_869416.HtM
BbS.okapop171.sbs/PoSt/1122_932690.HtM
BbS.okapop172.sbs/PoSt/1122_847398.HtM
BbS.okapop173.sbs/PoSt/1122_867058.HtM
BbS.okapop174.sbs/PoSt/1122_537176.HtM
BbS.okapop175.sbs/PoSt/1122_142374.HtM
BbS.okapop176.sbs/PoSt/1122_169654.HtM
BbS.okapop177.sbs/PoSt/1122_560227.HtM
BbS.okapop178.sbs/PoSt/1122_737762.HtM
BbS.okapop179.sbs/PoSt/1122_537734.HtM
BbS.okapop180.sbs/PoSt/1122_979922.HtM
BbS.okapop181.sbs/PoSt/1122_628176.HtM
BbS.okapop182.sbs/PoSt/1122_634909.HtM
BbS.okapop183.sbs/PoSt/1122_139384.HtM
BbS.okapop174.sbs/PoSt/1122_441589.HtM
BbS.okapop175.sbs/PoSt/1122_141895.HtM
BbS.okapop176.sbs/PoSt/1122_888266.HtM
BbS.okapop177.sbs/PoSt/1122_883151.HtM
BbS.okapop178.sbs/PoSt/1122_536460.HtM
BbS.okapop179.sbs/PoSt/1122_517644.HtM
BbS.okapop180.sbs/PoSt/1122_423227.HtM
BbS.okapop181.sbs/PoSt/1122_178352.HtM
BbS.okapop182.sbs/PoSt/1122_568861.HtM
BbS.okapop183.sbs/PoSt/1122_111732.HtM
BbS.okapop174.sbs/PoSt/1122_901220.HtM
BbS.okapop175.sbs/PoSt/1122_462655.HtM
BbS.okapop176.sbs/PoSt/1122_898711.HtM
BbS.okapop177.sbs/PoSt/1122_861458.HtM
BbS.okapop178.sbs/PoSt/1122_607462.HtM
BbS.okapop179.sbs/PoSt/1122_339812.HtM
BbS.okapop180.sbs/PoSt/1122_992383.HtM
BbS.okapop181.sbs/PoSt/1122_057257.HtM
BbS.okapop182.sbs/PoSt/1122_324648.HtM
BbS.okapop183.sbs/PoSt/1122_507890.HtM
BbS.okapop174.sbs/PoSt/1122_725970.HtM
BbS.okapop175.sbs/PoSt/1122_196215.HtM
BbS.okapop176.sbs/PoSt/1122_265448.HtM
BbS.okapop177.sbs/PoSt/1122_896460.HtM
BbS.okapop178.sbs/PoSt/1122_456271.HtM
BbS.okapop179.sbs/PoSt/1122_912246.HtM
BbS.okapop180.sbs/PoSt/1122_618023.HtM
BbS.okapop181.sbs/PoSt/1122_789038.HtM
BbS.okapop182.sbs/PoSt/1122_040198.HtM
BbS.okapop183.sbs/PoSt/1122_839725.HtM
BbS.okapop174.sbs/PoSt/1122_163982.HtM
BbS.okapop175.sbs/PoSt/1122_966007.HtM
BbS.okapop176.sbs/PoSt/1122_769856.HtM
BbS.okapop177.sbs/PoSt/1122_991948.HtM
BbS.okapop178.sbs/PoSt/1122_130392.HtM
BbS.okapop179.sbs/PoSt/1122_280718.HtM
BbS.okapop180.sbs/PoSt/1122_506250.HtM
BbS.okapop181.sbs/PoSt/1122_819690.HtM
BbS.okapop182.sbs/PoSt/1122_617679.HtM
BbS.okapop183.sbs/PoSt/1122_473400.HtM
BbS.okapop174.sbs/PoSt/1122_217781.HtM
BbS.okapop175.sbs/PoSt/1122_711138.HtM
BbS.okapop176.sbs/PoSt/1122_869417.HtM
BbS.okapop177.sbs/PoSt/1122_405398.HtM
BbS.okapop178.sbs/PoSt/1122_632259.HtM
BbS.okapop179.sbs/PoSt/1122_489561.HtM
BbS.okapop180.sbs/PoSt/1122_710832.HtM
BbS.okapop181.sbs/PoSt/1122_193176.HtM
BbS.okapop182.sbs/PoSt/1122_169184.HtM
BbS.okapop183.sbs/PoSt/1122_557310.HtM

