import qualified Data.ByteString as S import qualified Data.ByteString.Lazy as L import System.IO.Posix.MMap import System.Directory import System.Posix.Files import System.FilePath import Control.Monad import Control.Applicative import Text.Printf import System.Cmd import System.Exit import System.Mem import Control.Exception main = do system "find /usr/src -type f > files_to_read" always (removeFile "files_to_read") $ do fs <- lines <$> readFile "files_to_read" {- ss <- getDirectoryContents dir fs <- filterM (\f -> do st <- getFileStatus (dir f) return (not $ isDirectory st)) ss -} printf "Comparing %d files\n" (length fs) forM_ (zip [1..] fs) $ \(i,f) -> do t <- eq f if t then when (i `mod` 100 == 0) $ print i else exitWith (ExitFailure 1) where always = flip finally eq f = do m <- mmapFile f s <- S.readFile f return (m == s)