查找没有特定扩展名的文件

时间:2010-07-09 13:23:35

标签: regex unix

任何人都可以帮我一个正则表达式找到没有.tar.gz扩展名的文件

我需要它在我的unix脚本中工作

for i in <REGEX for non tar.gx files>
do
something
done

感谢

5 个答案:

答案 0 :(得分:3)

永远不要永远不要使用正则表达式“匹配每个与Y不匹配的X”。相反,使用普通的正则表达式X并否定结果。

(在shell表达式中,将==替换为!=,或使用grep -v。在Perl中,使用!~而不是=~。在JQuery中,使用:not运算符等。如果您的API不允许您执行任何其他操作,只需指定一个正则表达式,请使用Chomsky的 A形式语言层次结构来击败供应商。)

补充的正则表达式总是低效,不可读或特定于引擎 - 通常都是以上所有。只是拒绝滥用正则表达式,使用工具来完成他们擅长的任务!

答案 1 :(得分:3)

在bash中,启用了extglob(看起来是默认值),你可以使用!(<glob>)否定一个glob。所以:

for i in !(*.tar.gz)
do
    something
done

如果你想匹配两个globs,你可以写for i in *.tar.gz *~。同样,如果要匹配既不是gzip压缩文件也不是备份文件的所有文件,则可以编写for i in !(*.tar.gz|*~)

答案 2 :(得分:1)

如果您不想使用扩展通配符,您还可以包含一个简单的测试:

for file in *
do
    if [[ $file != *.tar.gz ]]
    then
        something
    fi
done

答案 3 :(得分:1)

另一种可能性(说明一种经常被忽视的技术)很简单:

ls | grep -v 'pdf$'|while read i; do echo "i=$i"; done

对于这个特殊问题,这是一个锤到裂缝的领域,但是如果你需要对一组具有稍微复杂的选择标准的文件做一些事情,这可以很快得到回报。

它可以在任何类似sh的外壳中工作。

答案 4 :(得分:1)

你也可以使用find ......

find . -type f -not -iname "*.tar.gz"
相关问题