在Linux系统中,通配符是一套强大的文件名匹配机制,让你能用一个模式同时操作多个文件。它不同于正则表达式,而是shell内置的特殊字符linux 通配符的使用,用于快速筛选、移动、删除或复制大量文件。掌握通配符,能让你从重复性操作中解放出来,极大提升命令行效率。
星号问号通配符怎么用
星号匹配任意长度的任意字符,包括零个字符。比如ls .txt会列出所有txt文件,rm test会删除所有以test开头的文件。问号?则严格匹配单个字符,例如ls file?.log只会匹配file1.log、fileA.log,但不会匹配file10.log。这两个基础通配符组合使用更强大,像data_???.csv能匹配data_001.csv、data_abc.csv,而data_.csv会匹配所有data开头的csv文件。

实际运维中,我常组合它们做批量操作。备份日志时用cp .log /backup/复制所有日志,清理临时文件时用rm -rf ./temp__cache删除所有匹配的缓存目录。但要注意,星号会匹配当前目录所有非隐藏文件,要先用ls测试匹配结果再执行删除,避免误删。问号在文件名长度固定时特别精准,比如处理日期格式为20260101这样的八位数字文件。
中括号匹配字符集技巧
中括号[]定义一个字符集合,匹配其中任意单个字符。例如ls file[123].txt会匹配file1.txt、file2.txt、file3.txt。你还可以用连字符表示范围,如[a-z]匹配所有小写字母,[0-9]匹配所有数字,[A-Za-z]匹配所有字母。中括号内放多个范围或单个字符都可以,比如[0-9a-f]匹配十六进制数字。

否定匹配用[!]或[^],匹配不在括号内的任意单个字符。比如ls file[!0-9].txt会匹配文件名最后一位不是数字的txt文件。这在排除特定文件时非常有用,例如rm logs_[!01]删除除了log_0和log_1开头的所有日志文件。但要注意,中括号内的特殊字符如和?不再具有通配含义linux web服务器,只是普通字符,这让你能精确匹配包含这些字符的文件名。
花括号扩展通配符区别
花括号{}用于生成字符串组合,不是真正的通配符,但常配合使用。它按逗号分隔生成多个模式,如{jpg,png}会展开为jpg png两个词。cp image.{jpg,png} /backup/等价于cp image.jpg image.png /backup/。花括号支持数字和字母序列,{1..10}生成1到10,{a..z}生成所有小写字母。

与通配符不同,花括号扩展在通配符匹配之前由shell执行,且不检查文件是否存在。使用时要注意这一点:echo {1..3}.txt输出1.txt 2.txt 3.txt,即使这些文件不存在。花括号可以嵌套和组合,比如{img,photo}_{01..03}.{jpg,png}会生成12个文件名组合。在处理批量文件重命名时,花括号加上mv命令能实现复杂的重命名操作。
通配符和正则表达式差异
很多初学者混淆通配符和正则表达式,这是两个完全不同的系统。通配符由shell解析,用于文件名匹配,星号匹配任意字符串,问号?匹配单个字符。正则表达式则被grep、sed等命令使用,星号表示前面字符重复零次或多次,点号.匹配任意单个字符,语法完全不同。
实际使用时红旗linux系统,如果你在grep中用了想匹配任意字符,会发现结果不对。grep “file.txt”会查找file后跟零个或多个e再跟.txt的文件,根本不是你想的那样。正确的做法是grep “file..txt”使用正则表达式语法。理解这个区别至关重要,能避免你在文本处理时写出错误的匹配模式linux 通配符的使用,提高脚本调试效率。
通配符常见错误与规避

最危险的错误是rm -rf 在错误目录执行。我曾经见过同事在/目录下误执行,导致系统崩溃。规避方法很简单:删除前先用ls或echo查看匹配结果,比如echo rm -rf ,确认无误后再执行真正的删除命令。另一个常见问题是忘记转义特殊字符,导致通配符被意外展开。
处理包含特殊字符的文件名时要格外小心。如果你要删除名为.txt的文件,直接用rm .txt会把所有txt文件都删掉。正确的做法是用引号括起来,如rm “.txt”或使用转义rm .txt。还有一点,通配符默认不匹配以点开头的隐藏文件,要匹配它们需要显式指定,如ls .[!.]匹配当前目录下所有隐藏文件。
高级通配符使用技巧

开启extglob扩展通配符能获得更强大的匹配能力。执行shopt -s extglob后,你可以使用?()匹配零次或一次,()匹配零次或多次,+()匹配一次或多次,@()匹配其中之一,!()匹配否定。例如rm !(.txt|.log)会删除除txt和log之外的所有文件,这在批量清理时非常灵活。
结合find命令使用通配符能实现递归匹配。find . -name “.conf” -type f -exec cp {} /backup/ ;会查找所有conf文件并复制到备份目录。管道配合通配符也很有用,ls *.jpg | xargs -I {} convert {} -resize 50% resized_{}能批量处理图片。记住,通配符匹配受LC_COLLATE等环境变量影响,在多语言环境下可能排序不同,生产环境建议设置LC_ALL=C确保行为一致。
你在使用通配符时踩过哪些坑?欢迎在评论区分享你的经历,如果这篇文章帮到了你,别忘了点赞让更多Linux新手看到。
