我试图在一些文件夹和任何子文件夹中找到所有PDF文件,只是在终端中,而不是在脚本中.我对linux也很陌生,所以如果我错过任何明显的事情,或者对诊断我的特定问题至关重要,请道歉.
我正在使用bash 4.1.5(1)-release(i486-pc-linux-gnu),并且在google上做了一些关于glob和extglob表达式的讨论,看来我应该使用的语法是
$ ls **.pdf
Run Code Online (Sandbox Code Playgroud)
然而,这没有任何结果,因为没有文件匹配*.pdf当前文件夹中的模式./; 它似乎想读**作*:
ls: cannot access **.pdf: No such file or directory
Run Code Online (Sandbox Code Playgroud)
在其他地方有PDF,在1到5深的子文件夹中(特别是在每个子文件夹1深),其中一些我可以通过检查看到
$ ls */*.pdf
Run Code Online (Sandbox Code Playgroud)
因此,ls似乎工作正常.它的手册似乎不是很有帮助,因为我所能看到的可能是任何使用我们ls用-R旗帜调用的东西,这在上述任何一种情况下都没有解决问题.
我尝试使用extglob模式(确保打开它们shopt).我可以看到我的深度-1文件有ls */*?(.)pdf,但我看不到任何与ls .*(/*)pdf或ls .*(/*).pdf,甚至那里有一个PDF文件子目录中.
我在其他地方(参考.gitignoregit存储库中的文件)中读到该**模式并不适用于所有人.
这可能会影响我,我如何解决它(理想情况下没有超级用户权限)?可能这个(或一些相关问题)也会影响extglob功能吗?
jim*_*ara 14
你可能想考虑一下
find . -name '*.pdf' -exec ls -l {} \;
Run Code Online (Sandbox Code Playgroud)
要么
find . -name '*.pdf' -ls
Run Code Online (Sandbox Code Playgroud)
哪里.是您当前的工作目录.glob功能附带4.0+ bash.换句话说,glob扩展不可移植.
选项extglob并且globstar是从glob库中获取扩展功能所必需的; 它们是使用shell options(shopt)实用程序打开的,如下所述.
要使用globstar(导致**模式按照bash手册中的描述运行),必须激活它(在bash 4.0+中)
shopt -s globstar
Run Code Online (Sandbox Code Playgroud)
并启用更多"功能"正则表达式表达式?(ab)和*(ab)它们的完整效果,使用
shopt -s extglob
Run Code Online (Sandbox Code Playgroud)
要再次关闭选项,请为eaxample 指定-u标志而不是s
shopt -u globstar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13677 次 |
| 最近记录: |