diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py
index 0b8582b..d619ea5 100644
--- a/pre_commit/clientlib.py
+++ b/pre_commit/clientlib.py
@@ -112,6 +112,18 @@ LOCAL = 'local'
 META = 'meta'
 
 
+class OptionalSensibleRegex(cfgv.OptionalNoDefault):
+    def check(self, dct: Dict[str, Any]) -> None:
+        super().check(dct)
+
+        if '/*' in dct.get(self.key, ''):
+            logger.warning(
+                f'The {self.key!r} field in hook {dct.get("id")!r} is a '
+                f"regex, not a glob -- matching '/*' probably isn't what you "
+                f'want here',
+            )
+
+
 class MigrateShaToRev:
     key = 'rev'
 
@@ -227,6 +239,8 @@ CONFIG_HOOK_DICT = cfgv.Map(
         for item in MANIFEST_HOOK_DICT.items
         if item.key != 'id'
     ),
+    OptionalSensibleRegex('files', cfgv.check_string),
+    OptionalSensibleRegex('exclude', cfgv.check_string),
 )
 CONFIG_REPO_DICT = cfgv.Map(
     'Repository', 'repo',

diff --git a/tests/clientlib_test.py b/tests/clientlib_test.py
index 2e2f738..bfb754b 100644
--- a/tests/clientlib_test.py
+++ b/tests/clientlib_test.py
@@ -166,6 +166,23 @@ def test_validate_warn_on_unknown_keys_at_top_level(tmpdir, caplog):
     ]
 
 
+def test_validate_optional_sensible_regex(caplog):
+    config_obj = {
+        'id': 'flake8',
+        'files': 'dir/*.py',
+    }
+    cfgv.validate(config_obj, CONFIG_HOOK_DICT)
+
+    assert caplog.record_tuples == [
+        (
+            'pre_commit',
+            logging.WARNING,
+            "The 'files' field in hook 'flake8' is a regex, not a glob -- "
+            "matching '/*' probably isn't what you want here",
+        ),
+    ]
+
+
 @pytest.mark.parametrize('fn', (validate_config_main, validate_manifest_main))
 def test_mains_not_ok(tmpdir, fn):
     not_yaml = tmpdir.join('f.notyaml')

Add warning for `files` / `exclude` containing `/*`
it's a common mistake to believe that those fields are globs, they're not -- they're regular expressions. (and matching `/*` is nonsense, it matches `''`, `'/'` as well as `'//////////////////////////////////////////////////////'`
tests/clientlib_test.py::test_validate_optional_sensible_regex
tests/clientlib_test.py::test_check_type_tag_failures[definitely-not-a-tag] tests/clientlib_test.py::test_check_type_tag_failures[fiel] tests/clientlib_test.py::test_check_type_tag_success tests/clientlib_test.py::test_config_valid[config_obj0-True] tests/clientlib_test.py::test_config_valid[config_obj1-True] tests/clientlib_test.py::test_config_valid[config_obj2-False] tests/clientlib_test.py::test_local_hooks_with_rev_fails tests/clientlib_test.py::test_config_with_local_hooks_definition_passes tests/clientlib_test.py::test_config_schema_does_not_contain_defaults tests/clientlib_test.py::test_validate_manifest_main_ok tests/clientlib_test.py::test_validate_config_main_ok tests/clientlib_test.py::test_validate_config_old_list_format_ok tests/clientlib_test.py::test_validate_warn_on_unknown_keys_at_repo_level tests/clientlib_test.py::test_validate_warn_on_unknown_keys_at_top_level tests/clientlib_test.py::test_mains_not_ok[validate_config_main] tests/clientlib_test.py::test_mains_not_ok[validate_manifest_main] tests/clientlib_test.py::test_valid_manifests[manifest_obj0-True] tests/clientlib_test.py::test_valid_manifests[manifest_obj1-True] tests/clientlib_test.py::test_valid_manifests[manifest_obj2-True] tests/clientlib_test.py::test_migrate_sha_to_rev_ok[dct0] tests/clientlib_test.py::test_migrate_sha_to_rev_ok[dct1] tests/clientlib_test.py::test_migrate_sha_to_rev_ok[dct2] tests/clientlib_test.py::test_migrate_sha_to_rev_ok[dct3] tests/clientlib_test.py::test_migrate_sha_to_rev_dont_specify_both tests/clientlib_test.py::test_migrate_sha_to_rev_conditional_check_failures[dct0] tests/clientlib_test.py::test_migrate_sha_to_rev_conditional_check_failures[dct1] tests/clientlib_test.py::test_migrate_sha_to_rev_conditional_check_failures[dct2] tests/clientlib_test.py::test_migrate_to_sha_apply_default tests/clientlib_test.py::test_migrate_to_sha_ok tests/clientlib_test.py::test_meta_hook_invalid[config_repo0] tests/clientlib_test.py::test_meta_hook_invalid[config_repo1] tests/clientlib_test.py::test_meta_hook_invalid[config_repo2] tests/clientlib_test.py::test_default_language_version_invalid[mapping0] tests/clientlib_test.py::test_default_language_version_invalid[mapping1] tests/clientlib_test.py::test_minimum_pre_commit_version_failing tests/clientlib_test.py::test_minimum_pre_commit_version_passing tests/clientlib_test.py::test_warn_additional[schema0] tests/clientlib_test.py::test_warn_additional[schema1]