我正在尝试查找特定目录中的所有XML文件以及其中的所有子目录(递归)。

ls -R *.xml仅列出当前目录中的文件。我很确定,子文件夹本身有几个.xml文件,但没有显示。

这是配置问题吗?

评论

你可以做ls -R | grep .xml

#1 楼

尝试使用Find

sudo find . -print | grep -i '.*[.]xml'


评论


是必须使用sudo还是要确保超级用户特权?

– Shamim Hafiz
13年6月13日在20:36

我让你决定。须藤,不须藤。

– Mitch♦
13年6月13日在20:44

只是出于兴趣。与ls -R相比,find有什么优势?

– don.joey
2014年5月22日上午9:21

@ don.joey这可能会帮助stackoverflow.com/questions/13830036/…

– Mitch♦
2014年5月22日在10:08

-1用于混合find和grep,当find可以使用正则表达式和glob进行过滤时,并且在需要混合时不使用find的-print0和grep的-z。

–muru
2015年4月3日在6:54



#2 楼

您只能使用find来执行此操作:

find . -name '*.xml'


.是当前目录。如果需要在另一个目录中搜索,请用目录路径替换.

评论


它是否在以当前目录为根的目录中递归搜索所需文件。就我而言,它仅检查当前目录,而不检查子目录。

– Mostafiz Rahman
2014年9月30日20:24在

@mostafiz,您需要引用“ * .xml”部分。我将编辑答案。

– KaeruCT
2014年10月1日14:39

实际上,我在当前目录中搜索了.php文件。但是它仅返回当前目录中的.php文件,未在子目录中递归搜索。这就是为什么我要问find命令是否递归搜索的原因。

– Mostafiz Rahman
2014年10月1日下午16:52

@ mostafiz,find命令以递归方式搜索。如果不引用该参数,我认为您的shell可能会对*进行扩展,因此它将与当前目录中的文件匹配。

– KaeruCT
2014年10月1日19:38



行!可能是我犯了一些错误。现在,它运行良好!

– Mostafiz Rahman
2014年10月2日14:02

#3 楼

请尝试以下命令:

ls -R | grep '.*[.]xml'


ls没有用于过滤输出的选项。为此,您将需要使用管道。这会将输出从ls传递到grep,然后对其进行过滤以仅显示.xml文件。

评论


无论如何要得到它来显示它来自的目录?

– AdamO
15年7月28日在20:55

强制链接:为什么不解析ls?

–俄罗斯
17年4月24日在11:02

#4 楼

bash

使用globstar shell选项,我们可以使用递归glob ./**/*

bash-4.3$ shopt -s globstar
bash-4.3$ for i in  ./**/*.xml; do printf "%s\n" "$i" ; done
./adwaita-timed.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/META-INF/context.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/WEB-INF/beans.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/WEB-INF/web.xml

一个模块Find,它允许递归目录树遍历。在特殊的find()函数中,我们可以定义所需的子例程和要遍历的目录,在本示例中为.。在这种情况下,单线代码是:一个整齐的函数walk(),它是os模块的一部分,并重复返回最上层路径的元组,所有子目录的列表和文件名的列表。我们可以执行以下操作:

bash-4.3$ perl -le 'use File::Find; find(sub{-f && $_ =~ /.xml$/ && print $File::Find::name},".")' 
./adwaita-timed.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/beans.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/web.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/liangweb/build.xml


这可能比脚本整洁得多: Override“> #!/usr/bin/env python import os,sys for r,s,f in os.walk("."): for i in f: if i.endswith(".xml") print(os.path.join(r,i))

查找

其他答案提到了find进行递归遍历,这是工作的必备工具。需要说明的是find具有多个命令行开关,例如-printf以所需格式打印输出,-type f仅查找常规文件,-inum按索引节点号搜索,-mtime按修改日期搜索,-exec <command> {} \;执行使用传递文件作为参数来处理文件的特定命令(其中{}是当前文件的标准find占位符),还有许多其他命令,因此请阅读find的联机帮助页。

#5 楼

在Gnome Filemanager内,您可以单击放大镜图标(通常在右上角),然后开始键入内容以在当前文件夹中进行搜索。
对于某些人(我),这比使用命令要容易得多线。