递归地扩展到当前目录中的所有文件?

我知道**/*.ext扩展到与*.ext相匹配的所有子目录中的所有文件,但是在当前目录中同样包含了所有这些文件的扩展?递归地扩展到当前目录中的所有文件?

回答:

这将在击4工作:

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

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

shopt -s globstar 

man bash

globstar

If set, the pattern ** used in a filename expansion con‐

text will match a files and zero or more directories and

subdirectories. If the pattern is followed by a /, only

directories and subdirectories match.

回答:

$ find . -type f 

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

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

这将用grep从查找字符串“foo”的每个文件。

回答:

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

find . -name '*.ext' -print 

回答:

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

请在下面找到其他变化的测试以及它们的行为。


与3472个文件样本VLC资源库文件夹测试文件夹:

(3472文件总数算作每个:find . -type f | wc -l

  • ls -1 **/*.* - 收益3338
  • ls -1 {,**/}*.* - 退货3341(由提议)
  • ls -1 {,**/}* - 返回8265
  • ls -1 **/* - 回报7817,除了隐藏文件(如提出Dennis)
  • ls -1 **/{.[^.],}* - 收益7869(提议Dennis)
  • ls -1 {,**/}.?* - 返回15855
  • ls -1 {,**/}.* - 返回20321

所以我认为最接近的方法列出所有文件的递归伊利是第一个例子(**/*.*),按照gniourf-gniourf comment(假设文件有适当的扩展,或使用特定的一个),作为第二个实施例给出了象下面几个重复:

$ 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,并且您可以意外删除错误的文件。

以上是 递归地扩展到当前目录中的所有文件? 的全部内容, 来源链接: utcz.com/qa/259022.html

回到顶部