递归地扩展到当前目录中的所有文件?
我知道**/*.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 **/*.*
- 收益3338ls -1 {,**/}*.*
- 退货3341(由提议)ls -1 {,**/}*
- 返回8265ls -1 **/*
- 回报7817,除了隐藏文件(如提出Dennis)ls -1 **/{.[^.],}*
- 收益7869(提议Dennis)ls -1 {,**/}.?*
- 返回15855ls -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
禁用)。不建议这样做,因为它可能会影响命令,如mv
或rm
,并且您可以意外删除错误的文件。
以上是 递归地扩展到当前目录中的所有文件? 的全部内容, 来源链接: utcz.com/qa/259022.html