使用通配符递归运行`ls`

wha*_*ife 4 linux bash ls wildcards

我正在尝试使用以下命令查找特定文件类型的所有项目文件:

ls -ltR *.mb
Run Code Online (Sandbox Code Playgroud)

我知道在几个文件夹中有我想要的文件,但我没有得到任何结果。我做错了什么?

phu*_*clv 14

ls不匹配模式。它只是列出输入参数中的文件或文件夹。传递给之前*.mb被shell扩展,因此如果当前目录中没有命名的文件,则不会输出任何内容,否则只会输出当前目录中的文件ls*.mb

递归列出文件的标准方法是使用 find

find . -name '*.mb' -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以根据需要自定义输出列表格式。请参阅:按上次编辑日期列出文件


另一种方法是使用globstar可以启用的shopt -s globstar

ls -ltR **/*.mb
Run Code Online (Sandbox Code Playgroud)

第一个**/将匹配任何任意子目录路径。然后*.mb与这些目录中的文件匹配

  • 环球之星

    如果设置,**文件名扩展上下文中使用的模式将匹配所有文件以及零个或多个目录和子目录。如果模式后跟 a /,则只有目录和子目录匹配。

https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html