我想从shell(bash)通配字符串*.log
中排除特定文件名(比如fubar.log
)。没有什么我尝试似乎工作,因为globbing不使用标准RE集。从shell通配中排除特定文件名
测试情况:该目录包含
fubar.log
fubaz.log
barbaz.log
text.txt
只有fubaz.log barbaz.log
必须由水珠扩大。
我想从shell(bash)通配字符串*.log
中排除特定文件名(比如fubar.log
)。没有什么我尝试似乎工作,因为globbing不使用标准RE集。从shell通配中排除特定文件名
测试情况:该目录包含
fubar.log
fubaz.log
barbaz.log
text.txt
只有fubaz.log barbaz.log
必须由水珠扩大。
如果你使用bash
#!/bin/bash
shopt -s extglob
ls !(fubar).log
或不extglob
shopt -u extglob
for file in !(fubar).log
do
echo "$file"
done
或
for file in *log
do
case "$file" in
fubar*) continue;;
*) echo "do your stuff with $file";;
esac
done
谢谢!你有没有extglob的解决方案? – Alsciende 2010-04-15 09:08:48
被拒绝的编辑表明,在没有extglob的情况下需要这样做:'shopt -u extglob'我没有知识来判断它。 – 2013-10-25 10:09:37
你为什么不使用grep?例如:
ls | grep -v fubar | while read line;做回声“阅读$行”;完成;
这里是输出:
阅读barbaz.log 阅读fubaz.log 阅读[如何我可以使用逆或负通配符的text.txt
因为glob字符串被赋予一个程序(logrotate)。所以我需要一个glob字符串。 – Alsciende 2010-04-15 09:38:44
可能重复时,模式匹配一个unix/linux的shell?](http://stackoverflow.com/questions/216995/how-can-i-use-inverse-or-negative-wildcards-when-pattern-matching-in-a-unix-linu)这是另一个非常接近的子集。 – 2014-10-19 13:33:12