2012-01-24 110 views
0

我将如何在ubuntu终端中键入文件路径以包含所有子目录中的所有文件?linux包含所有目录

如果我有一个名为“books”的主目录,但有大量的子目录包含各种不同名称的文件,我该如何键入一个路径来包含所有子目录中的所有文件?

/books/???

+3

目前尚不清楚你想要做什么。 –

+0

在什么情况下?在脚本语言或命令行中作为shell命令的输入?一些更多的信息将是有用的.. –

+0

通常,如果一个工具支持这个,将会有一个标志可以传递给该工具来递归子目录。 – Skolor

回答

0

目前还不清楚你实际上想要什么......可能是y如果你直接问这个问题,你会得到一个更好的解决方案,而不是你试图规避原始问题的另一个问题。

你的意思是像下面这样的东西吗?

file */* 

,其中第一*扩展了所有的子目录和所有的第二*包含文件?

我已经任意选择了file指令。你可以选择任何你想运行的命令来扩展你的shell。 还要注意,还将包括目录(如果不按名称排除,例如*.png*.txt)。 通配符*不完全是文件路径包含所有子目录中的所有文件,但它扩展为与通配符表达式匹配的所有文件(或目录)作为列表,例如, file1 file2 file3 file4。另请参阅this tutorial on shell expansion

请注意,可能有解决相关问题的简单方法。像复制所有子目录中的所有文件(例如,cp -a,请参阅man cp)。我很喜欢find。与grep结合生成更灵活的搜索模式相当容易。为了提供一个随便举个例子:

du `find . | grep some_pattern_to_occur | grep -v some_pattern_to_not_occur` 
+0

我从来没有注意过这个命令,所以感谢分享它。当我尝试它时,它报告目录以及文件,并且它提供了关于它的文件/目录的类型的更多信息,例如 'api:目录' 'api/pom.xml:XML文档文本' 所以我想用它来遍历文件,你必须通过一些东西来运行它,以便删除文件名后面的所有内容,然后你运行它的命令必须能够处理目录。我通过'man file'快速浏览了一下,并没有看到避免额外信息的方法。 –

+1

@BenRose:我随便挑选了'file'命令做一个小例子... – moooeeeep

+0

哦,我明白你的意思了。感谢后续:) –

0
./books/* 

例如,假设我是在 '书' 父目录:

ls ./books/* 

编辑:

其实,列出所有的树递归你应该使用:

ls -R ./books/* 
+0

ls做什么? – Blainer

+0

列表目录内容 – sdarjazi

1

从书本顶级目录中,你可以使用命令:

find . -type f

然后,如果你想,说贯穿猫每一个文件,你可以使用xargs的命令:

find . -type f | xargs cat

欲了解更多信息,请使用命令:

man find

man xargs

+1

这是遍历子目录层次结构的正确方法。有些shell为此提供通配符语法'**/*',但Bash v2不在其中。 – tripleee

+0

尚未支持的任何Ubuntu版本对终端使用bash版本3或更高版本(据我所知)。 – moooeeeep

相关问题