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

移动以 3 个字母扩展名结尾但最后一个字母是“g”或“f”的每个文件?
mv public_html/*.??[g,f] public_html/images/

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

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

答案1

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

现在,从技术上来说。

mv public_html/*.??[gf] public_html/images/

还会移动一个名为foo.x.fas 的文件,?该文件也与..

另外,如果没有与该模式匹配的文件,那么某些 shellbash可以移动一个名为字面意思的文件*.??[gf](Bourne shell 引入的错误,再次修复zshbash,您可以使用 )来解决这个问题shopt -s failglob

因此,这里对于以f或结尾的 3 个字符扩展名g,这会更多,但仍然有最后一个警告([^.]而不是[!.]使用一些 shell):

mv public_html/*.[!.][!.][fg] public_html/images/

3人份字母:

mv public_html/*.[[:alpha:]][[:alpha:]][fg] public_html/images/

对于 jpg、png 或 gif,使用zshshell:

mv public_html/*.(jpg|gif|png) public_html/images/

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

mv public_html/*.@(jpg|gif|png) public_html/images/

答案2

假设bash或者朋友,你可以使用

mv public_html/*.??[gf] public_html/images/

或者,更准确地说是匹配

mv public_html/*.{jpg,png,gif} public_html/images/

相关内容