什么';这是最简洁的“s”版本;匹配除这些字符串以外的所有内容”;在shell还是regex中?

什么';这是最简洁的“s”版本;匹配除这些字符串以外的所有内容”;在shell还是regex中?,regex,shell,grep,Regex,Shell,Grep,Linux:我想列出一个目录及其子目录中的所有文件,除了一些字符串。为此,我一直在使用find/grep/shell globbing的组合。例如,我想列出除目录中的文件以外的所有文件 ./bin ./lib ./resources 我理解这可以按所示和所示完成。但这两个版本并不能解决“一切,但这一模式”的一般问题 似乎使用条件来过滤结果要容易得多,但我想知道在regexp或shell扩展的globbing中是否有紧凑而优雅的方式来描述这一点 谢谢。您的命令| egrep-v“pattern1

Linux:我想列出一个目录及其子目录中的所有文件,除了一些字符串。为此,我一直在使用find/grep/shell globbing的组合。例如,我想列出除目录中的文件以外的所有文件

./bin
./lib
./resources
我理解这可以按所示和所示完成。但这两个版本并不能解决“一切,但这一模式”的一般问题

似乎使用条件来过滤结果要容易得多,但我想知道在regexp或shell扩展的globbing中是否有紧凑而优雅的方式来描述这一点


谢谢。

您的命令| egrep-v“pattern1 | pattern2 | pattern3”
使用find的prune选项

find . -path './bin' -prune -o -path './lib' -prune -o -path './resources' -prune -o «rest of your find params» 
启用后,您可以使用
排除文件在您的应用程序中。一些例子:

  • 除了bin、lib和资源之外的所有内容

    shopt -s extglob ls -Rl !(bin|lib|resources) (所有包含
    i
    的内容都与所有内容相同,但不包含
    i
    的内容除外。)


我不知道这个白鹭开关。这是一个好办法。谢谢这将抑制所有文件,这些文件的名称中恰好有模式,这可能比您想要抑制的文件更多。我同意@vartec的观点-这可能是危险的。我更喜欢删减选项。不能用行尾/行首字符来限制它?^美元呢?因为这个选项更简洁,更容易阅读。避免使用“here”作为链接文本。对不起,因为英语不是我的母语,我不知道正确的方法。你能推荐一些吗?谢谢,最小巧的。我也尝试过类似的方法,但从来没有意识到如果你把*放在一起,那么任何东西都是匹配的,所以没有其他东西。我想知道如何在更多限制的基础上增加这一点。比如:“除了“bin”和“lib”,所有有“i”的东西。。。 ls -Rl !(bin|lib|!(*i*))