有没有办法使用 shell globbing 来识别嵌套目录?
因此,如果我有 dir/dir1/dir2/dir3/dir4/dir5/.. 并且我在所有这些文件下都有文件,那么与所有目录下的所有文件匹配的等效通配符模式是什么,类似于 - 例如 -ls -R
在 Bash 4 中,shopt -s globstar
您可以使用 with 和 zsh 来**/*
包含除隐藏文件之外的所有内容。您可以shopt -s dotglob
在 Bash 4 或setopt dotglob
zsh 中执行以包含隐藏文件。
在 ksh 中,set -o globstar
启用它。我认为没有办法隐式包含点文件,但我认为**/{.[^.],}*
可行。
特别是关于 git(gitignore、gitattributes 和采用文件名的命令):如果模式不包含斜杠,*
通配符将匹配深度。如果它确实包含斜杠, git 将调用带有标志的fnmatchFNM_PATHNAME
,简单的通配符不会匹配斜杠。**
不支持匹配深度。也许这种深度匹配可以通过一个新FNM_STARSTAR
标志得到更广泛的支持,并在 glibc、gnulib 和其他地方实现。
如果您想对 find 返回的所有文件进行操作,而不仅仅是列出它们,您可以将它们通过管道传递给 xargs:
find <directory> -type f | xargs ls
但这仅适用于没有递归标志的命令。
您可以使用树,它将递归显示所有文件夹。
tree <path>
vanilla Bash 没有办法做到这一点,但是大多数命令都接受一个-R
or--recursive
选项来告诉它们进入目录。
如果您只想列出位于目录或其子目录中任何位置的所有文件,您可以使用find。
递归查找-type f
具有给定目录的文件 ( ):
find <directory> -type f