diff --git a/auto_delete_nightly_test_data.py b/auto_delete_nightly_test_data.py
index 4ec5b0f..e40b95c 100755
--- a/auto_delete_nightly_test_data.py
+++ b/auto_delete_nightly_test_data.py
@@ -15,7 +15,9 @@
 import datetime
 import os
 import re
+import shutil
 import sys
+import time
 
 from cros_utils import command_executer
 from cros_utils import constants
@@ -134,30 +136,33 @@
 
 def CleanChromeOsImageFiles(chroot_tmp, subdir_suffix, days_to_preserve,
                             dry_run):
-  rv = 0
-  rv2 = 0
-  ce = command_executer.GetCommandExecuter()
-  minutes = 1440 * days_to_preserve
   # Clean files that were last accessed more than the specified time.
-  rv2 = 0
-  cmd = (r'find {0}/*{1}/* -maxdepth 1 -type d '
-         r'-amin +{2} '
-         r'-exec bash -c "echo rm -fr {{}}" \; '
-         r'-exec bash -c "rm -fr {{}}" \;').format(chroot_tmp, subdir_suffix,
-                                                   minutes)
-  if dry_run:
-    print('Going to execute:\n%s' % cmd)
-  else:
-    rv2 = ce.RunCommand(cmd, print_to_console=False)
-    if rv2 == 0:
-      print('Successfully cleaned chromeos image autotest directories from '
-            '"{0}/*{1}".'.format(chroot_tmp, subdir_suffix))
-    else:
-      print('Some image autotest directories were not removed from '
-            '"{0}/*{1}".'.format(chroot_tmp, subdir_suffix))
+  seconds_delta = days_to_preserve * 24 * 3600
+  now = time.time()
+  errors = 0
 
-  rv += rv2
-  return rv
+  for tmp_dir in os.listdir(chroot_tmp):
+    # Directory under /tmp
+    tmp_dir = os.path.join(chroot_tmp, tmp_dir)
+    if tmp_dir.endswith(subdir_suffix):
+      # Tmp directory which ends with subdir_suffix.
+      for subdir in os.listdir(tmp_dir):
+        # Subdirectories targeted for deletion.
+        subdir_path = os.path.join(tmp_dir, subdir)
+        if now - os.path.getatime(subdir_path) > seconds_delta:
+          if dry_run:
+            print('Will run:\nshutil.rmtree({})'.format(subdir_path))
+          else:
+            try:
+              shutil.rmtree(subdir_path)
+              print('Successfully cleaned chromeos image autotest directories '
+                    'from "{}".'.format(subdir_path))
+            except OSError:
+              print('Some image autotest directories were not removed from '
+                    '"{}".'.format(subdir_path))
+              errors += 1
+
+  return errors
 
 
 def CleanChromeOsTmpAndImages(days_to_preserve=1, dry_run=False):
@@ -175,6 +180,9 @@
   # Clean image files in *-pfq directories
   rv += CleanChromeOsImageFiles(chromeos_chroot_tmp, '-pfq', days_to_preserve,
                                 dry_run)
+  # Clean image files in *-llvm-next-nightly directories
+  rv += CleanChromeOsImageFiles(chromeos_chroot_tmp, '-llvm-next-nightly',
+                                days_to_preserve, dry_run)
 
   return rv
 
