例如,我有文件名为
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)
很明显,这可能会指向这些文件中的任何一个。
具体来说,我想用一个“例外”命令(如果存在的话)说水珠任何文件,只要它不具有t
,s
,a
之前_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)