4

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

./bin
./lib
./resources

我知道这可以按照这个问题这个其他的所示来完成。但是这两个版本都不是笼统地解决“一切,而是这种模式”的情况。

似乎使用条件过滤结果要容易得多,但我想知道在正则表达式或外壳扩展通配符中是否有任何紧凑而优雅的方式来描述它。

谢谢。

4

3 回答 3

7

yourcommand | egrep -v "pattern1|pattern2|pattern3"

于 2009-03-22T15:11:38.007 回答
6

使用查找的修剪选项。

find . -path './bin' -prune -o -path './lib' -prune -o -path './resources' -prune -o «rest of your find params» 
于 2009-03-22T15:20:14.820 回答
3

启用bash 的 extglob shopt 设置后,!您可以排除带有通配符模式的文件。一些例子:

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

    shopt -s extglob
    ls -Rl !(bin|lib|resources)
    
  • i除了 bin 和 lib 之外的所有内容

    ls -Rl !(bin|lib|!(*i*))
    

    除了没有i' 的东西外,所有有' 的东西都一样。)i

于 2009-03-22T16:57:51.043 回答