如何让MSYS2的ls命令不显示带有Windows隐藏属性的文件?
如何让MSYS2的ls命令不显示带有Windows隐藏属性的文件?
我太懂这种烦恼了——把MSYS2的HOME改成Windows用户目录后,一堆NTUSER.DAT、AppData这类带Windows隐藏属性的文件全冒出来,手动加一堆--hide确实太繁琐了。其实咱们可以利用MSYS2自带的工具优雅解决,它的find命令是支持识别Windows隐藏属性的,刚好能帮ls过滤掉这些文件。
下面给你两个实用方案:
方案1:简单别名(日常快速用)
把这行加到你的~/.bashrc或者~/.zshrc里:
alias ls='find . -maxdepth 1 -not -hidden -exec ls -d {} +'
以后直接敲ls,就只会显示没有Windows隐藏属性的文件。不过这个别名有个小局限:如果要给ls加参数(比如ls -l、ls /c/Users/xxx/Downloads),就得用原生命令了,这时候可以试试方案2。
方案2:灵活Shell函数(支持所有ls参数)
要是想保留ls的全部功能,同时默认过滤隐藏文件,就写个shell函数替换ls:
ls() { # 没传参数时,自动过滤Windows隐藏文件 if [[ $# -eq 0 ]]; then find . -maxdepth 1 -not -hidden -exec command ls -d {} + else # 传了参数就用原生ls执行,不影响原有功能 command ls "$@" fi }
把这个函数放到你的shell配置文件里,之后不管是ls还是ls -lh /path都能正常工作,无参数时自动帮你过滤掉那些Windows系统隐藏文件。
小提示
- MSYS2的
find命令的-hidden选项是专门识别Windows文件隐藏属性的,不管文件名是不是以.开头,完全适配你的场景。 - 如果偶尔想查看所有文件(包括那些Windows隐藏的),直接敲
command ls就能调用原生ls命令了。
备注:内容来源于stack exchange,提问作者user31708
相关产品推荐
相关产品推荐

