如何使用 '*' 捕获所有异常内容

oza*_*rka 6 bash wildcards

例如,我有文件名为

A_1.txt A_t_1.txt A_ts_1.txt A_tsa_1.txt
Run Code Online (Sandbox Code Playgroud)

在一个目录中~/admin/packages/

我正在通过通配到 A_1.txt 来构建 for 循环

for f in ~/admin/packages/*_1.txt
Run Code Online (Sandbox Code Playgroud)

很明显,这可能会指向这些文件中的任何一个。

具体来说,我想用一个“例外”命令(如果存在的话)说水珠任何文件,只要它不具有tsa之前_1.txt

编辑:我忘了提到我将路径存储为变量。

PROJECT="~/admin/packages/*_1.txt"

for f in ${PROJECT}...
Run Code Online (Sandbox Code Playgroud)

hee*_*ayl 10

您可以使用以下extglob模式执行此操作bash

!(*t|*s|*a)_1.txt
Run Code Online (Sandbox Code Playgroud)

extglob首先启用(如果未启用):

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

然后你可以这样做:

for f in ~/admin/packages/!(*t|*s|*a)_1.txt; do ##Something; done
Run Code Online (Sandbox Code Playgroud)

例子:

$ echo *_1.txt
A_1.txt Ab_1.txt A_t_1.txt A_ts_1.txt A_tsa_1.txt

$ shopt -s extglob

$ echo !(*t|*s|*a)_1.txt
A_1.txt Ab_1.txt
Run Code Online (Sandbox Code Playgroud)

缩短(由于混乱):

!(*[tsa])_1.txt
Run Code Online (Sandbox Code Playgroud)