使用ls查找匹配特定模式的所有文件

时间:2012-02-08 03:41:06

标签: glob ls

我正在尝试将所有PDF文件放在某个文件夹和任何子文件夹中,只是在终端中,而不是在脚本中。我对linux也很陌生,所以如果我错过任何明显的事情,或者对诊断我的特定问题至关重要,请道歉。

我正在使用bash 4.1.5(1)-release(i486-pc-linux-gnu),并且在google上对glob和extglob表达式进行了一些讨论,看来我应该使用的语法是

$ ls **.pdf

然而,这没有找到任何内容,因为当前文件夹*.pdf中没有与模式./匹配的文件;它似乎想要将**视为*

ls: cannot access **.pdf: No such file or directory

其他地方有PDF,在1到5深的子文件夹中(特别是在每个子文件夹1深),其中一些我可以通过检查

看到
$ ls */*.pdf

因此,ls似乎正常运作。它的手册似乎不是很有帮助,因为我可以看到任何使用ls -R并使用shopt标志可能有任何用处,这不能解决上述任何一种情况下的问题。< / p>

我尝试使用extglob模式(确保使用ls */*?(.)pdf打开它们)。我可以使用ls .*(/*)pdf查看我的深度1文件,但我看不到ls .*(/*).pdf.gitignore的任何内容,即使是在有PDF的子目录中也是如此。

我在其他地方(参考git存储库中的**文件)中读到{{1}}模式对每个人都不起作用。

这会影响我吗?我如何解决它(理想情况下没有超级用户权限)?可能这个(或一些相关问题)也会影响extglob功能吗?

2 个答案:

答案 0 :(得分:14)

您可能需要考虑查找

find . -name '*.pdf' -exec ls -l {} \;

find . -name '*.pdf' -ls

在哪里。是您当前的工作目录。 glob功能附带4.0+ bash。换句话说,glob扩展不可移植。

答案 1 :(得分:5)

要从extglob库获取扩展功能,需要选项globstarglob;它们是使用shell选项(shopt)实用程序打开的,如下所述。

要使用globstar(导致**模式的行为与bash手册中所述相同),必须使用

激活它(在bash 4.0+中)
shopt -s globstar

并启用更具“功能性”的正则表达式表达式,如?(ab)*(ab),请使用

shopt -s extglob

要再次关闭选项,请指定-u标志而不是s,用于eaxample

shopt -u globstar