2010-12-03 84 views
18

是否有使用shell Globbing来标识嵌套目录的方法?将所有嵌套目录下的所有文件与shell匹配匹配

因此,如果我有dir/dir1/dir2/dir3/dir4/dir5/..并且我拥有所有这些文件,那么匹配所有目录下的所有文件的等效匹配模式是什么,类似于 - 例如 - ls -R

+0

投票搬到SuperUser.com。此外,为什么这个标签'混帐'? – meagar 2010-12-03 19:27:30

+0

gitignore不使用shell globbing;这是一个单独的问题。 – Cascabel 2010-12-03 23:16:50

+0

相似:[什么扩展到当前目录中的所有文件递归?](http://stackoverflow.com/q/1690809/55075)在SO – kenorb 2015-04-18 22:53:22

回答

19

在bash 4,具有shopt -s globstar和zsh中你可以使用**/*其中将包括隐藏文件除外的一切。您可以在zsh中使用Bash 4或setopt dotglob中的shopt -s dotglob来导致包含隐藏文件。

在ksh中,set -o globstar启用它。我不认为有一种方法可以隐式包含点文件,但我认为**/{.[^.],}*有效。

0

有没有办法与香草Bash做到这一点,然而大多数命令接受-R--recursive选项告诉他们下降到目录。

如果您只想列出位于目录或其子目录中任何位置的所有文件,则可以使用find

要递归查找文件(-type f)与给定的目录:

find <directory> -type f 
+0

@Matt谢谢马特。 – meagar 2010-12-03 21:13:07

0

您可以使用树,它会递归地显示所有文件夹。

tree <path> 
1

如果你想采取行动通过查找返回的所有文件,而不是只列出它们,你可以管他们xargs的:

find <directory> -type f | xargs ls 

但这仅仅是针对那些不命令有一个递归标志。

6

关于git(gitignore,gitattributes和带文件名的命令)的具体说明:如果该模式不包含斜线,*通配符将匹配较深。如果它包含斜线git will call fnmatchFNM_PATHNAME标志,并且简单通配符不匹配斜杠。 **不匹配深度不支持。也许这种深度匹配可以通过新的FNM_STARSTAR标志得到更广泛的支持,并且在glibc,gnulib和其他地方实现。

相关问题