diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,4 +1,9 @@
-# Release history for stack-clean-old-work
+# Release history for stack-clean-old
+
+## 0.4.6 (2022-02-03)
+- fix --recursive and --subdirs to work again
+- show --recursive dir paths
+- ignore non-ghc dirs in ~/.stack/programs/
 
 ## 0.4.5 (2022-01-14)
 - fix multiple reminders about using --delete
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -43,6 +43,11 @@
 using them, so removals should be done carefully
 but can recover a lot of diskspace.
 
+Further the commands can use `--subdirs` or `--recursive` to run over
+the projects in subdirs under the current directory or
+all matching `.stack-work` dirs from the current directory and below
+respectively.
+
 ### Example usage
 List a project's builds:
 ```ShellSession
diff --git a/src/GHC.hs b/src/GHC.hs
--- a/src/GHC.hs
+++ b/src/GHC.hs
@@ -33,7 +33,7 @@
 getGhcInstallDirs :: Maybe Version -> Maybe String -> IO [FilePath]
 getGhcInstallDirs mghcver msystem = do
   setStackProgramsDir msystem
-  sortOn ghcInstallVersion <$> globDirs matchVersion
+  sortOn ghcInstallVersion <$> globDirs ("ghc-" ++ matchVersion)
   where
     matchVersion =
       case mghcver of
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -106,13 +106,13 @@
                then map (dropPrefix "./" . takeDirectory) <$> findStackWorks
                else listStackSubdirs)
               >>= if needinstall
-                  then filterM (doesDirectoryExist . (</> "install"))
+                  then filterM (doesDirectoryExist . (</> ".stack-work/install"))
                   else return
       forM_ dirs $ \dir ->
         if changedir
         then
           withCurrentDirectory dir $ do
-          putStrLn $ "\n" ++ takeFileName dir ++ "/"
+          putStrLn $ "\n" ++ (if recursion == Recursive then id else takeFileName) dir ++ "/"
           act dir
         else act dir
     Nothing -> act ""
@@ -226,7 +226,7 @@
 
 listStackSubdirs :: IO [FilePath]
 listStackSubdirs =
-  listDirectory "." >>= filterM (\f -> doesDirectoryExist (f </> ".stack-work")) . L.sort
+  listDirectory "." >>= filterM (doesDirectoryExist . (</> ".stack-work")) . L.sort
 
 remindDelete :: Deletion -> IO ()
 remindDelete deletion =
diff --git a/stack-clean-old.cabal b/stack-clean-old.cabal
--- a/stack-clean-old.cabal
+++ b/stack-clean-old.cabal
@@ -1,6 +1,6 @@
 name:                stack-clean-old
-version:             0.4.5
-synopsis:            Clean away old stack build artefacts
+version:             0.4.6
+synopsis:            Clean away old stack build artifacts
 description:
         A tool for removing old .stack-work/install builds and
         .stack/snapshots & programs for older ghc versions
