diff --git a/bin/compile b/bin/compile
index 0b62cc4ded42450e17d0c2de7801df7bd1980b7b..d7b639ce31c408fae4c111ebf61c0563978d7658 100755
--- a/bin/compile
+++ b/bin/compile
@@ -6,6 +6,7 @@
 
 # Fail fast and fail hard.
 set -eo pipefail
+shopt -s extglob
 
 [ "$BUILDPACK_XTRACE" ] && set -o xtrace
 
@@ -20,7 +21,7 @@ CACHE_DIR=$2
 ENV_DIR=$3
 
 
-CACHED_DIRS=".heroku"
+CACHED_DIR=".heroku"
 WHITELISTED_CACHE_ENTRIES="python|python-stack|python-version|venv|vendor"
 
 # Static configurations for virtualenv caches.
@@ -144,12 +145,14 @@ bpwatch start clear_old_venvs
   [ -d $CACHE_DIR/$VIRTUALENV_LOC ] && rm -fr $CACHE_DIR/.heroku/venv $CACHE_DIR/.heroku/src
 bpwatch stop clear_old_venvs
 
+cd $CACHE_DIR
+rm !($WHITELISTED_CACHE_ENTRIES)
+
+cd $BUILD_DIR
+
 # Restore old artifacts from the cache.
 bpwatch start restore_cache
-  for dir in $CACHED_DIRS; do
-    cp -R $CACHE_DIR/$dir . &> /dev/null || true
-  done
-  ls -1 | grep -E -v "$WHITELISTED_CACHE_ENTRIES" | xargs rm -f
+  cp -R $CACHE_DIR/$CACHED_DIR . &> /dev/null || true
 bpwatch stop restore_cache
 
 set +e
@@ -211,10 +214,8 @@ bpwatch stop post_compile
 
 # Store new artifacts in cache.
 bpwatch start dump_cache
-  for dir in $CACHED_DIRS; do
     rm -rf $CACHE_DIR/$dir
     cp -R $dir $CACHE_DIR/
-  done
 bpwatch stop dump_cache
 
 # ### Fin.