我正在尝试将所有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功能吗?
答案 0 :(得分:14)
您可能需要考虑查找
find . -name '*.pdf' -exec ls -l {} \;
或
find . -name '*.pdf' -ls
在哪里。是您当前的工作目录。 glob功能附带4.0+ bash。换句话说,glob扩展不可移植。
答案 1 :(得分:5)
要从extglob
库获取扩展功能,需要选项globstar
和glob
;它们是使用shell选项(shopt
)实用程序打开的,如下所述。
要使用globstar
(导致**
模式的行为与bash手册中所述相同),必须使用
shopt -s globstar
并启用更具“功能性”的正则表达式表达式,如?(ab)
和*(ab)
,请使用
shopt -s extglob
要再次关闭选项,请指定-u
标志而不是s
,用于eaxample
shopt -u globstar