什么扩展到当前目录中的所有文件recursion?

我知道**/*.ext *.ext扩展到与*.ext匹配的所有子目录中的所有文件,但是什么是类似的扩展,包括当前目录中的所有这些文件?

这将在Bash 4中工作:

 ls -l {,**/}*.ext 

为了使双星号工作, globstar选项需要设置(默认:打开):

 shopt -s globstar 

man bash

     globstar
                  如果设置,文件扩展名中使用的模式**
                  文本将匹配一个文件和零个或多个目录和
                  子目录。 如果模式后面跟着一个“/”,
                  目录和子目录相匹配。

这将打印当前目录及其以“.ext”结尾的子目录中的所有文件。

 find . -name '*.ext' -print 

您可以使用: **/*.*以recursion方式包含所有文件(由: shopt -s globstar启用)。

请在下面find其他变体的testing以及它们的行为。


在示例VLC存储库文件夹中使用3472个文件testing文件夹:

(总计3472个文件,按照:find。-type find . -type f | wc -l

  • ls -1 **/*.* – 返回3338
  • ls -1 {,**/}*.* – 返回3341(由Dennis提议)
  • ls -1 {,**/}* – 返回8265
  • ls -1 **/* – 返回7817,隐藏文件除外(由Dennis提议)
  • ls -1 **/{.[^.],}* – 返回7869(由Dennis提议)
  • ls -1 {,**/}.?* /}。?* – 返回15855
  • ls -1 {,**/}.* /}。* – 返回20321

所以我认为按照gniourf-gniourf注释 (假设文件具有适当的扩展名或使用特定的扩展名),recursion列出所有文件的最接近的方法是第一个示例( **/*.* ),作为第二个示例给出如下几个重复:

 $ diff -u <(ls -1 {,**/}*.*) <(ls -1 **/*.*) --- /dev/fd/63 2015-04-19 15:25:07.000000000 +0100 +++ /dev/fd/62 2015-04-19 15:25:07.000000000 +0100 @@ -1,6 +1,4 @@ COPYING.LIB -COPYING.LIB -Makefile.am Makefile.am @@ -45,7 +43,6 @@ compat/tdestroy.c compat/vasprintf.c configure.ac -configure.ac 

另一个产生更多的重复。


要包含隐藏文件,请使用: shopt -s dotglob (由shopt -u dotglob禁用)。 这是不推荐的,因为它可以影响命令,如mvrm ,你可以意外删除错误的文件。

 $ find . -type f 

这将列出当前目录中的所有文件。 然后你可以使用-exec在输出上做一些其他的命令

 $find . -type f -exec grep "foo" {} \; 

这将grep每个文件的查找string“foo”。