什么扩展到当前目录中的所有文件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
禁用)。 这是不推荐的,因为它可以影响命令,如mv
或rm
,你可以意外删除错误的文件。
$ find . -type f
这将列出当前目录中的所有文件。 然后你可以使用-exec在输出上做一些其他的命令
$find . -type f -exec grep "foo" {} \;
这将grep每个文件的查找string“foo”。