有没有办法使用shell Globbing来识别嵌套的目录?
所以如果我有dir / dir1 / dir2 / dir3 / dir4 / dir5 / ..并且我拥有所有这些文件,那么匹配所有目录下的所有文件的等效匹配模式是什么,类似于 – 例如 – ls -R
在Bash 4中,可以使用**/*
,除了隐藏文件以外,其他所有内容都可以使用。 您可以在Bash 4中使用shopt -s dotglob
,或者在zsh中setopt dotglob
以使隐藏文件包含在内。
在ksh中, set -o globstar
启用它。 我不认为有一种隐式包含点文件的方法,但我认为**/{.[^.],}*
起作用。
特别是关于git(gitignore,gitattributes和带文件名的命令):如果模式不包含斜线, *
通配符将匹配较深。 如果它包含一个斜杠, git将调用fnmatch和FNM_PATHNAME
标志,简单的通配符将不匹配斜线。 **
不匹配深不支持。 也许这种深度匹配可以更广泛地支持一个新的FNM_STARSTAR
标志,并在glibc,gnulib和其他地方实现。
如果你想对查找返回的所有文件执行操作,而不是只列出它们,你可以将它们传递给xargs:
find <directory> -type f | xargs ls
但是这只适用于没有递归标志的命令。
您可以使用树,它会递归地显示所有文件夹。
tree <path>
用香草Bash没有办法做到这一点,然而大多数命令都接受-R
或 – --recursive
选项来告诉它们进入目录。
如果您只想列出目录或其子目录中任何位置的所有文件,则可以使用find 。
用给定的目录递归地查找文件( -type f
):
find <directory> -type f
你可以尝试:
**/*.*
但是它会忽略隐藏的文件(如.git
文件)。 有时候这是一个救命恩人。
阅读更多: 什么扩展到当前目录中的所有文件递归? 在SO