Is there a way to use shell Globbing to identify nested directories?
so if I have dir/dir1/dir2/dir3/dir4/dir5/.. and I have files under all of them, what is the equivalent globbing pattern to match all files under all directories, similar to - for example - ls -R
You can use tree, it will show all folders recursively.
You may try:
However it'll ignore hidden files (such as
.git
files). Sometimes it's a life-saver.Read more at: What expands to all files in current directory recursively? at SO
If you want to act on all the files returned by find, rather than just list them, you can pipe them to xargs:
But this is only for commands that don't have a recursive flag.
Specifically about git (gitignore, gitattributes, and commands that take filenames): if the pattern contains no slash,
*
wildcards will match deep. If it does contain a slash, git will call fnmatch with theFNM_PATHNAME
flag, and simple wildcards won't match slashes.**
to match deep isn't supported. Maybe this kind of deep matching could be more widely supported with a newFNM_STARSTAR
flag, and an implementation in glibc, gnulib and other places.There is no way to do this with vanilla Bash, however most commands accept a
-R
or--recursive
option to tell them to descend into directories.If you simply want to list all files located anywhere within a directory or its sub-directories, you can use find.
To recursively find files (
-type f
) with a given directory:In Bash 4, with
shopt -s globstar
, and zsh you can use**/*
which will include everything except hidden files. You can doshopt -s dotglob
in Bash 4 orsetopt dotglob
in zsh to cause hidden files to be included.In ksh,
set -o globstar
enables it. I don't think there's a way to include dot files implicitly, but I think**/{.[^.],}*
works.