我正试图在bash中列出不是.html
或.js
的文件
以下两种方法我都厌倦了,但都不管用?
ls !(*.html|*.js)
ls | grep -v '.(html|js)$'
还有另一种方法。bash有一个扩展glob模式的选项:
shopt -s extglob
ls !(*.html|*.js)
(请注意,这仍然是一个glob模式,而不是一个正则表达式——例如,*
的意思是"任何字符串",而不是"前面的零个或多个")。
如果您的ls
版本支持-I
标志:
ls -I *.js -I *.html
来自手册页:
-I, --ignore=PATTERN
do not list implied entries matching shell PATTERN
否则,使用find
:
find . -maxdepth 1 -type f ! ( -name "*.html" -o -name "*.js" )
对于格式化,添加:
-printf "%fn"
如果文件名需要管道传输,您只需要更改printf()
语句:
-printf '%f ' | xargs -0 ...
将extended-regexp
与-E
选项一起使用:
ls | grep -E -v '.(html|js)$'
-I
标志可以过滤ls
输出:
ls -I '*.html' -I '*.js'
或
ls | grep -v -e '.html' -e '.js'
来自手册页:
-e PATTERN, --regexp=PATTERN
Use PATTERN as the pattern; useful to protect patterns beginning with -.