diff --git a/src/tools/tidy/src/walk.rs b/src/tools/tidy/src/walk.rs
index 3539943ebefe2..06b979edb3526 100644
--- a/src/tools/tidy/src/walk.rs
+++ b/src/tools/tidy/src/walk.rs
@@ -1,10 +1,11 @@
 use ignore::DirEntry;
 
+use std::process::Command;
 use std::{ffi::OsStr, fs::File, io::Read, path::Path};
 
 /// The default directory filter.
 pub fn filter_dirs(path: &Path) -> bool {
-    let skip = [
+    let skip = vec![
         "tidy-test-file",
         "compiler/rustc_codegen_cranelift",
         "compiler/rustc_codegen_gcc",
@@ -31,6 +32,17 @@ pub fn filter_dirs(path: &Path) -> bool {
         "src/bootstrap/target",
         "vendor",
     ];
+    let command =
+        Command::new("git").args(["ls-files", ".", "--exclude-standard", "--others"]).output();
+    if let Ok(output) = command {
+        let stdout: Vec<&str> =
+            String::from_utf8_lossy(&output.stdout).split('\n').into_iter().collect();
+        for line in stdout {
+            if skip.contains(&line) {
+                skip.remove(skip.iter().position(|x| **x = line))
+            }
+        }
+    }
     skip.iter().any(|p| path.ends_with(p))
 }