I am learning the wildcards recursive globbing and tried
$ ls **/* | wc -l 15 $ ls */** | wc -l 15
They output identical results.
Is there any distinction between
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.Sign up to join this community
*/** will only match directories (and their subdirectories & files); it will not match files (non-directories) in the current directory, because the
*/ portion of it requires a directory prefix before beginning the
** globstar expansion. As for
**/*, the trailing
/* is extraneous, since the
** will, by itself, expand to every file and directory under the current directory (subject to the
dotglob option). Since every directory has been expanded by that point, the trailing
/* does not match anything.
Be careful using
ls to test, since it will "helpfully" read into any directories that you might pass it; consider instead something like:
printf "%s\n" */** printf "%s\n" **/*
Also note that piping to
wc -l could mislead you for actual counts; consider:
$ touch a $'b\nc' $ ls -1 a b?c $ ls | wc -l 3 ## WRONG!