移动以 3 个字母扩展名结尾的每个文件,但最后一个字母是“f”的“g”?

lic*_*rux 2 mv

mv public_html/*.??[g,f] public_html/images/
Run Code Online (Sandbox Code Playgroud)

那能行吗?这样所有扩展名为 .jpg、.png 和 .gif 的照片/图像都将被移动。

(我没有安装 Linux,我使用的是在线终端。不幸的是,他们的文件中没有任何照片)

Sté*_*las 5

[g,f]匹配g, ,(逗号)或f. 您[fg]只需要fg

现在,从技术上讲。

mv public_html/*.??[gf] public_html/images/
Run Code Online (Sandbox Code Playgroud)

也会移动一个名为foo.x.fas的文件?也匹配一个..

而且,如果没有文件匹配该模式,那么一些炮弹一样bash可以移动一个字面上叫文件*.??[gf]由Bourne shell中引入了一个错误,在再次固定zsh,你可以解决它bashshopt -s failglob)。

所以,这里有一个以for结尾的 3 个字符的扩展g,那会更多,但仍然有最后一个警告([^.]而不是[!.]一些外壳):

mv public_html/*.[!.][!.][fg] public_html/images/
Run Code Online (Sandbox Code Playgroud)

对于 3 个字母

mv public_html/*.[[:alpha:]][[:alpha:]][fg] public_html/images/
Run Code Online (Sandbox Code Playgroud)

对于 jpg、png 或 gif,带zsh外壳:

mv public_html/*.(jpg|gif|png) public_html/images/
Run Code Online (Sandbox Code Playgroud)

或使用 ksh 或zsh -o kshglobbash -O extglob

mv public_html/*.@(jpg|gif|png) public_html/images/
Run Code Online (Sandbox Code Playgroud)