在 shell 通配符中使用 OR 模式

mtk*_*mtk 72 ls shell bash zsh wildcards

我的目录的内容是

$ ls -lrt
total 0
-rw-r--r-- 1 user1 admin 19 Oct  8 12:31 night.txt
-rw-r--r-- 1 user1 admin 19 Oct  8 12:31 noon.txt
-rw-r--r-- 1 user1 admin 38 Oct  8 12:31 day.txt
Run Code Online (Sandbox Code Playgroud)

我想列出文件名中包含指定单词的文件的详细信息。

例子 :

$ ls -lrt *day|night*
ls: *day: No such file or directory
bash: night.txt: command not found
Run Code Online (Sandbox Code Playgroud)

预期输出

-rw-r--r-- 1 user1 admin 19 Oct  8 12:31 night.txt
-rw-r--r-- 1 user1 admin 38 Oct  8 12:31 day.txt
Run Code Online (Sandbox Code Playgroud)

如何列出与 2 个不同部分匹配的不同文件,或者简而言之如何使用 regex with ls,以便我可以OR获取文件名部分。

原来的情况,目录中有很多文件,缩短了查询的情况。

its*_*uce 90

您甚至不需要启用扩展的通配符来执行您想要的操作。这将在 bash 中工作:

ls {day*,night*}
Run Code Online (Sandbox Code Playgroud)

  • 或者可能 `*{day,night}*` 更接近 OP 想要的。 (10认同)
  • 不,它没有:`touch day.txt; 触摸夜.txt; ls {*day,night*}` 结果为 `ls: *day: No such file or directory` (8认同)
  • 我正在改编原始海报的文字;我以为这很清楚。*叹*。文字已更新。你肯定可以看到*机制*有效吗? (2认同)

Nah*_*eul 29

没有选项ls可以过滤文件名,但在大多数 shell 中都有通配扩展名man bash /Pattern Matching

克什

ls -lrtd -- *@(day|night)*
Run Code Online (Sandbox Code Playgroud)

zsh

setopt extendedglob
ls -lrtd -- *(day|night)*
Run Code Online (Sandbox Code Playgroud)

或者:

setopt kshglob
ls -lrtd -- *@(day|night)*
Run Code Online (Sandbox Code Playgroud)

猛击

shopt -s extglob
ls -lrtd -- *@(day|night)*
Run Code Online (Sandbox Code Playgroud)

在这三个 shell 中的任何一个中,您都可以执行此操作,但请注意,如果其中一种情况与任何文件不匹配,则该模式将保持未扩展状态(例如,*day* night1.txt othernight.txt如果没有包含day; 的文件名,请参阅man bash /EXPANSION/Brace Expansion具体说明):

ls -lrtd -- *{day,night}*
Run Code Online (Sandbox Code Playgroud)

在任何 shell 中,您都可以执行以下操作:

ls -lrtd -- *day* *night*
Run Code Online (Sandbox Code Playgroud)

在 zsh 中,如果没有day或没有night文件,则最后两个命令将失败;设置nonomatchcsh_null_glob选项,或(N)在每个模式后添加以避免这种情况。


Mat*_*teo 15

Shell 不使用正则表达式进行参数扩展。

您可以通过以下方式启用扩展模式匹配

$ shopt -s extglob
Run Code Online (Sandbox Code Playgroud)

进而

$ ls @(day|night).txt
day.txt   night.txt
Run Code Online (Sandbox Code Playgroud)

例如参见Bash 参考手册(模式匹配)