Zsh教程:如何用通配符排除特定扩展名的文件
用ls列出不含.m2ts和.mp4扩展名的文件方法
下面分几种常用shell的实现方式:
Bash环境
Bash需要开启extglob扩展(大部分系统默认已开启,若未开启可先执行shopt -s extglob),然后用取反通配符:
ls !(*.m2ts|*.mp4)
这里的!()表示匹配不符合括号内模式的文件,刚好对*.(m2ts|mp4)做了取反。如果要包含隐藏文件,加上-A参数:
ls -A !(*.m2ts|*.mp4)
Zsh环境
Zsh原生支持更简洁的取反语法,直接用^符号:
ls ^*.(m2ts|mp4)
或者用~符号实现取反:
ls *~*.(m2ts|mp4)
要包含隐藏文件同样加-A:
ls -A ^*.(m2ts|mp4)
通用跨shell方法
如果不想区分shell,用ls配合grep是最稳妥的方式:
ls | grep -vE '\.(m2ts|mp4)$'
-v表示反向匹配(排除符合规则的内容)-E启用扩展正则,\.(m2ts|mp4)$匹配以.m2ts或.mp4结尾的文件名
要包含隐藏文件就加-A:
ls -A | grep -vE '\.(m2ts|mp4)$'
内容的提问来源于stack exchange,提问作者Windymelt
相关产品推荐
相关产品推荐

