scala/ScalaBook/appendix-B/findcmd.scala

import java.lang.System
import java.io.File
import java.util.regex.Pattern

val Path = System.getenv("PATH")

val PathSep = File.pathSeparator

val CASE_I = Pattern.CASE_INSENSITIVE

val pathFolders = Path.split(PathSep).toList
  .map(new File(_)).filter { file =>
    file.isDirectory && (
      file.listFiles match {
        case null => false
        case _    => true
      }
    )
  }

val names = args map (_.toLowerCase)
//println(pathFolders)

names foreach { name =>
  println("--- " + name + " --->")
  var counter = 0
  pathFolders foreach { folder =>
    val children = folder.list
    val found = children filter { child =>
      child.toLowerCase.indexOf(name) > -1 ||
      Pattern.compile(name, CASE_I).matcher(child).find
    }
    
    if(found.size > 0) {
      if(folder.getAbsolutePath.indexOf(" ") > -1) {
        println("\"" + folder + "\":")
      } else {
        println(folder + ":")
      }
      println("  " + found.mkString(", "))
    }
    counter += found.size
  }
  
//  if(counter > 0)
    println()
}