XML
文件以及其中的所有子目录(递归)。ls -R *.xml
仅列出当前目录中的文件。我很确定,子文件夹本身有几个.xml
文件,但没有显示。这是配置问题吗?
#1 楼
尝试使用Findsudo 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内,您可以单击放大镜图标(通常在右上角),然后开始键入内容以在当前文件夹中进行搜索。对于某些人(我),这比使用命令要容易得多线。
评论
你可以做ls -R | grep .xml