使用shell globbing匹配所有嵌套目录下的所有文件

Sam*_*una 23 linux bash shell shopt

有没有办法使用shell Globbing来识别嵌套目录?

所以,如果我有DIR/DIR1/DIR2/DIR3/dir4/dir5/..和我在所有这些文件,什么是相当于通配符匹配模式下的所有目录中的所有文件,类似 - 例如 - ls -R

Pau*_*ce. 22

在Bash 4中,使用shopt -s globstar和zsh可以使用**/*包含除隐藏文件之外的所有内容.您可以shopt -s dotglob在Bash 4或setopt dotglobzsh中执行以包含隐藏文件.

在ksh中,set -o globstar启用它.我认为没有办法隐含地包含点文件,但我认为**/{.[^.],}*有效.

  • @Samer:但是gitignore没有使用shell globbing,它使用的是fnmatch. (2认同)

Tob*_*obu 6

特别是关于git(gitignore,gitattributes和带有文件名的命令):如果模式不包含斜杠,则*通配符将匹配深度.如果它确实包含斜杠,git将使用该FNM_PATHNAME标志调用fnmatch,而简单的通配符将不匹配斜杠.**不支持匹配深度.也许这种深度匹配可以通过新FNM_STARSTAR标志得到更广泛的支持,并且可以在glibc,gnulib和其他地方实现.